我正在编写一个分析html文件的bash脚本,我想获取每个单元的内容<tr>...</tr>
.所以我的命令看起来像:
$ tr -d \\012 < price.html | grep -oE '<tr>.*?</tr>'
Run Code Online (Sandbox Code Playgroud)
但它似乎grep
给了我以下结果:
$ tr -d \\012 < price.html | grep -oE '<tr>.*</tr>'
Run Code Online (Sandbox Code Playgroud)
我怎么能.*
不贪心?
Chr*_*our 14
如果你有,GNU Grep
你可以-P
用来使比赛非贪婪:
$ tr -d \\012 < price.html | grep -Po '<tr>.*?</tr>'
Run Code Online (Sandbox Code Playgroud)
该-P
选项启用Perl Compliant正则表达式(PCRE),这是非?
基本正则表达式(BRE)和扩展正则表达式(ERE)非贪婪匹配所不支持的.
如果您正在使用,-P
您也可以使用环顾四周来避免在匹配中打印标签,如下所示:
$ tr -d \\012 < price.html | grep -Po '(?<=<tr>).*?(?=</tr>)'
Run Code Online (Sandbox Code Playgroud)
如果您没有GNU grep
并且HTML格式正确,您可以这样做:
$ tr -d \\012 < price.html | grep -o '<tr>[^<]*</tr>'
Run Code Online (Sandbox Code Playgroud)
注意:上面的示例不适用于嵌套标记<tr>
.