使用sed获取带括号的字符串中的数字

时间:2013-08-14 22:49:30

标签: bash sed html-parsing

我想使用bash脚本获取网站的数量。我首先忘记了网页,然后尝试解析页面并获取数字。

index.html有一个包含我想要的数字的长行。

(...) </dl><dl class=""><dt>Year <dd>   <a title="City" href="http://example.com/City">City</a> <em>(400)</em>  </dd><dd> (...)

我希望在上面的示例中获得 400 。我正在执行以下操作,但是没有匹配:

CITYNUMBER=`sed -n -e 's/.*City<\/a>\s<em>(\(.*?\))<\/em>/\1/p' index.html`

2 个答案:

答案 0 :(得分:1)

这可能适合你(GNU sed):

sed -n -e 's/.*City<\/a>\s<em>(\([^)]*\)).*/\1/p' index.html

答案 1 :(得分:0)

sed正则表达式总是贪心,所以.*?无论如何都无法正常工作

事实上,如果你只想提取数字,grep是不错的选择:

grep -Po 'City</a>\s*<em>\(\K\d*(?=\))'

例如:

kent$  echo '(...) </dl><dl class=""><dt>Year <dd>   <a title="City" href="http://example.com/City">City</a> <em>(400)</em>  </dd><dd> (...)'|grep -Po 'City</a>\s*<em>\(\K\d*(?=\))'
400