2016-04-03 58 views
0

我已經設法從網站提取數據,然後從提取的網頁中獲取相關數據。現在我堅持如何從<td> cols中提取數據。進入數據操作的數組?如何使用bash將數據從​​列中提取到數組中?

我提取HTML是以下幾點:

   <tbody> 

        <tr> 
        <td>abc3207</td> 
<td>151</td> 
<td>Lorem Ipsum</td> 
<td>Off Campus</td> 
<td>OFF</td> 
<td>12 of 999 </td> 
<td>&nbsp;</td> 
<td>&nbsp;</td> 
<td><a href="http://lorem.com/test?id=abc3207&amp;year=2015" target="_blank">Get</a></td> 

        </tr> 

        <tr> 
        <td>abc3207</td> 
<td>151</td> 
<td>Dolor Sit Amet</td> 
<td>Mount Lawley</td> 
<td>ON</td> 
<td>45 of 999 </td> 
<td><a href="http://lorem.com//lookup?sq_content_src=asas">Activity</a></td> 
<td>&nbsp;</td> 
<td><a href="http://lorem.com/test?id=abc3207&amp;year=2015" target="_blank">Get</a></td> 

        </tr> 

       </tbody> 

我使用的是bash腳本,因爲我必須通過慶典只能做它這樣做。

+0

你認爲在你的腳本中使用正則表達式? – 2016-04-03 06:24:05

+0

「僅限bash」意味着你已經將自己限制在了錯誤的工具上。 –

回答

0

要解析html或xml,最好使用專用命令行工具xmlstarletxmllint

但隨着你的HTML樣品,你可以試試這個:

mapfile td < <(sed -n 's/[\t ]*<td[^>]*>\(.*\)<\/td>/\1/p' file) 
for td in "${td[@]}"; do 
    printf "$td" 
done 

SED提取所有TD的內容並將結果傳遞使用process substitution到映射文件。

mapfile將來自進程替換的每行存儲在名爲$td的數組變量中。

它將與你的簡單的HTML一起工作:每行

  • 一個td標籤
  • 開在同一條線上收td
+0

'printf「$ td」'是越野車 - 如果在字面文本中有'%'符號,它將被視爲格式字符串;反斜槓將被視爲轉義序列;等等。最好使用'printf'%s \ n'「$ td」'(或者,如果你明確地*想*映射轉義序列,'printf'%b \ n'「$ td」' - 這實際上是建議作爲首選模式,在[相關的POSIX規範](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html)中替換回應這些序列的'echo';請參閱「應用使用「 部分)。而'printf'%s \ n'「$ {td [@]}」'是打印所有結果的一種更簡單的方法。 –