2016-11-25 27 views
-1

我想通過Bash使用sed或awk解析來自網站的數據(隨時改變我的方向來處理數據)。通過Bash解析表中的數據或數據

下面是一段代碼示例。

<tbody> 
     <tr> 
      <td class="text-left">111</td><td class="text-center"> 
       <a href="/path1.htm">AAA</a> 
      </td><td class="text-center"> 
       <a href="/path2.htm" class="tp-link-policy">BBB</a> 
      </td><td class="text-center"> 
       Updated October, 2016 
      </td> 
     </tr><tr> 
      <td class="text-left">CCC</td><td class="text-center"> 
       <a href="/path3.htm"> 
      . 
      . 
      . 
      . 
     </tr> 
</tbody> 

通常當我在PHP中使用的preg_match我有換行符沒有問題,但在擊我需要徹底改變我的正則表達式的想法。你是否建議首先準備數據以供sed和awk讀取,以刪除所有換行符,並根據我希望使用sed或awk的數據結構以不同的方式重新創建它們?

例如,我會爲每個<tr>創建一個換行符,所以結果如下所示?我是對的還是我應該離開這種想法?這會起作用,但我不喜歡操縱這樣的數據。

<tbody> 
<tr><td class="text-left">111</td><td class="text-center"><a href="/path1.htm">AAA</a></td><td class="text-center"><a href="/path2.htm" class="tp-link-policy">BBB</a></td><td class="text-center">Updated October, 2016</td></tr> 
<tr><td class="text-left">CCC</td><td class="text-center"><a href="/path3.htm">....</tr></tbody> 

輸出應該是,例如:

111|AAA|BBB|Updated October, 2016 
+1

您的預期產出是多少? – Inian

+3

如果您想對HTML做任何有用的操作,請不要使用基於行的文本處理工具,例如awk和sed。 –

+0

對於命令行HTML解析,您可以查看「html2」(來自「xml2」包)或「hxpipe」及相關函數(來自「html-xml-utils」包)。他們都大致做你想做的事情。 –

回答

0

我用xmllint畢竟。

xmllint --html --shell <file> 

然後我執行這個命令來檢索一個需要的xpath。

grep <text> 

當您在html文件中找到結構時,您可以根據xpath完全搜索您的文件。

xmllint --html --xpath <xpath> <file> 

但是很多有效的方法是使用Python和Beautiful Soup