Bash
使用shell腳本根據條件從html文件中的多個表中刪除行
需要你的幫助。我在 Linux 機器上有一個 HTML 文件,如果這些表的任何行中有“否”,我想刪除一行。
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 的方法,但它們都不起作用。非常感謝任何幫助
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