如何检查HTML文件是否出现任何行中的两个单词

时间:2016-07-08 05:50:49

标签: html shell

我有一个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是否存在任何操作。我怎样才能做到这一点?我无法形成任何命令

2 个答案:

答案 0 :(得分:0)

使用lynx

$ lynx -dump result.html | grep 'ERROR.*FAILURE'
   Operaion2 ERROR LOCATION FAILURE

使用awk

如果您有可用的特定于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,则输出该块。