Bash

使用shell腳本根據條件從html文件中的多個表中刪除行

  • February 19, 2022

需要你的幫助。我在 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

引用自:https://unix.stackexchange.com/questions/691338