2016-04-03 70 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 [@]}”'是打印所有结果的一种更简单的方法。 –

相关问题