我正在编写一个bash脚本,它分析一个html文件,并希望获得每个<tr>...</tr>的内容。所以我的命令看起来是:
$ tr -d \\012 < price.html | grep -oE '<tr>.*?</tr>'但是grep似乎给了我以下结果:
$ tr -d \\012 < price.html | grep -oE '<tr>.*</tr>'我怎样才能使.*不贪婪呢?
发布于 2013-10-01 20:26:21
非贪婪匹配不是grep -E支持的扩展正则表达式语法的一部分。如果有,则使用grep -P,或者切换到Perl / Python / Ruby /什么东西。(哦,还有pcregrep.)
当然,如果你真的是说
<tr>[^<>]*</tr>相反,您应该这样说;那么普通的旧grep就可以正常工作了。
您可以(乏味地)扩展regex以接受嵌套标记,这些标记不是<tr>,但当然,最好使用适当的HTML解析器,而不是花费大量时间重新发现正则表达式为什么不是正确的工具。
https://stackoverflow.com/questions/19125173
复制相似问题