需要你的帮助。我在 Linux 机器上有一个 HTML 文件,如果这些表的任何行中都不存在“no”,我想删除一行。
HTML 文件是:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Checking files</title>
</head>
<body>
<h1>Table 1</h1>
<p>
Checking data of yes or no
</p>
<table border="1" width="100%">
<tr>
<th colspan="7" style="text-align:center"><h2 class="heading">Data 1</h2></th>
</tr>
<tr>
<th> </th>
<th style="width:33%">Names</th>
<td>Serial</th>
<th>Severe?</th>
<th>Days</th>
<th>Remark Date</th>
</tr>
<tr class="checks-one">
<td style="text-align:center"><i class="alert"></i></td>
<td style="width:33%">Net_one</td>
<td>int</td>
<td>yes</td>
<td>50</td>
<td>action</td>
</tr>
<tr class="check-two">
<td style="text-align:center"><i class="alert"></i></td>
<td style="width:33%">Name_two</td>
<td>hex</td>
<td>no</td>
<td>55</td>
<td>no action</td>
</tr>
<tr class="check-three">
<td style="text-align:center"><i class="alert"></i></td>
<td style="width:33%">Name_three</td>
<td>hex</td>
<td>yes</td>
<td>58</td>
<td>action</td>
</tr>
</table>
<table border="1" width="100%">
<tr>
<th colspan="7" style="text-align:center"><h2 class="cert-kind">Data 2</h2></th>
</tr>
<tr>
<th> </th>
<th style="width:33%">Names</th>
<td>Serial</th>
<th>Severe?</th>
<th>Days</th>
<th>Remark Date</th>
</tr>
<tr class="checks-one">
<td style="text-align:center"><i class="alert"></i></td>
<td style="width:33%">Net_one</td>
<td>int</td>
<td>yes</td>
<td>50</td>
<td>action</td>
</tr>
<tr class="check-two">
<td style="text-align:center"><i class="alert"></i></td>
<td style="width:33%">Name_two</td>
<td>hex</td>
<td>no</td>
<td>55</td>
<td>no action</td>
</tr>
<tr class="check-three">
<td style="text-align:center"><i class="alert"></i></td>
<td style="width:33%">Name_three</td>
<td>hex</td>
<td>yes</td>
<td>58</td>
<td>action</td>
</tr>
</table>
</body>
</html>
该html文件的输出如下所述
Table 1
Checking data of yes or no
Data 1
Names Serial Severe? Days Remark Date
Net_one int yes 50 action
Name_two hex no 55 no action
Name_three hex yes 58 action
Data 2
Names Serial Severe? Days Remark Date
Net_one int yes 50 action
Name_two hex no 55 no action
Name_three hex yes 58 action
我的预期输出是:
Table 1
Checking data of yes or no
Data 1
Names Serial Severe? Days Remark Date
Net_one int yes 50 action
Name_three hex yes 58 action
Data 2
Names Serial Severe? Days Remark Date
Net_one int yes 50 action
Name_three hex yes 58 action
我是 shell 脚本编写的新手,我尝试了 awk、sed 等多种方法,但没有一个有效。非常感谢任何帮助
答案1
awk -v RS="</tr>" '
!/<td>no<\/td>/{ a=(NR==1 ? "" : a RS) $0 }
END{ print a }
' file.html
根据您的具体示例,这个 GNU awk 似乎可以解决问题。
- 将行分隔符设置为
</tr>
- 将不包含带有“no”字段的所有“行”添加到变量(只是不要在第一个“行”上添加字段分隔符)
- 打印出重新创建的 html 文件
尝试一下,看看它是否适合你。
编辑:首先想到的是使用变量,但是可以很容易地删除它,结果将是这样的:
awk -v RS="</tr>" -v ORS="" '!/<td>no<\/td>/{ print (NR==1 ? "" : RS) $0 }' file.html