我有一个HTML
文件,其内容如下:
<tr>
<td>Operaion1</td>
<td>ERROR</td>
<td>LOCATION</td>
<td>OK</td>
</tr>
<tr>
<td>Operaion2</td>
<td>ERROR</td>
<td>LOCATION</td>
<td>FAILURE</td>
</tr>
现在,我想使用shell脚本检查此result.html文件是否出现ERROR和OK。对于每一行,我必须检查ERROR和FAILURE是否存在任何操作。我怎样才能做到这一点?我无法形成任何命令
答案 0 :(得分:0)
$ lynx -dump result.html | grep 'ERROR.*FAILURE'
Operaion2 ERROR LOCATION FAILURE
如果您有可用的特定于html的工具,则应使用它。如果你不这样做,我们可以使用awk获得答案:
$ awk '/ERROR/ && /FAILURE/' RS='</tr>' result.html
<tr>
<td>Operaion2</td>
<td>ERROR</td>
<td>LOCATION</td>
<td>FAILURE</td>
Awk一次隐含地读入一条记录。我们将定义一条记录,使其包含一个完整的行。
/ERROR/ && /FAILURE/
这是一个合乎逻辑的条件。如果当前记录包含与正则表达式ERROR
和匹配的文本,则其中包含与正则表达式FAILURE
匹配的文本,则此条件为真。由于我们没有指定任何操作,因此awk将执行默认操作,即打印记录。
RS='</tr>'
这告诉awk使用字符串</tr>
作为记录分隔符。
答案 1 :(得分:0)
使用sed:
$ sed -n '/<tr>/{:a;N;/<\/tr>/!ba};/ERROR.*FAILURE/p' result.html
<tr>
<td>Operaion2</td>
<td>ERROR</td>
<td>LOCATION</td>
<td>FAILURE</td>
</tr>
将<tr>
和</tr>
之间的所有行附加到模式空间,如果找到ERROR
,则输出该块。