0

我在使用 grep 来通过一些 html 代码时遇到问题。

我正在尝试找到与此类似的字符串

<td><a href='/go/12229' target="_blank" rel="nofollow">product description here</a></td><td> $<font color='red'>0.25</font>

我正在尝试推广公式来计算低于 0.25 美元的每一行 不同的部分是: href='/go/12229' /go/ 之后的数字会改变,但总是一个 5 位数长的数字

产品描述可以是带有空格和特殊字符的字母数字

价格可以是 0.01 到 0.25 之间的任何值

我试过制作像下面这样的公式,但它要么不起作用,要么什么也不返回。

grep -c "href='/go/'[*] target="_blank" rel="nofollow">*</a></td><td> $<font color='red'>[0].[0-2][0-9]</font>"

我认为这与我没有正确转义特殊字符有关,但我不确定。

任何帮助表示赞赏。

4

1 回答 1

0

好的 - 这要求每行的格式与您的示例一样,但这应该为您提供每行介于 0.01 和 0.25 之间的链接、描述和价格。这段代码的内容将它们放在像“priceawk”这样的文件中并使其可执行:

grep 'go\/[0-9]\{5\}' | awk -F"<" '
{
split( $7, price_arr, ">" )

if( price_arr[ 2 ] > 0.00 && price_arr[ 2 ] < 0.26 )
    {
    split( $3, link_arr, "'\''" )
    split( link_arr[ 3 ], desc_arr, ">" )
    printf( "%s %s %s\n", link_arr[ 2 ], desc_arr[ 2 ], price_arr[ 2 ] )
    }
} '

然后像这样使用它:

cat input | priceawk

使用我从您的行制作的测试输入文件,我得到以下类型的输出:

/go/12229 product description here 0.25
/go/13455 find this line2 0.01
/go/12334 find this line3 0.23
/go/34455 find this line4 0.16

可以改进 printf() 以提供不同形式的输出,使用比当前空间更有用的分隔符。

于 2013-04-22T18:41:13.517 回答