如何使用bash将cols中的数据提取到数组中?

时间:2016-04-03 06:21:30

标签: bash html-table extract

我设法从网站提取数据,然后从提取的网页获取相关数据。现在我不知道如何从<td> cols中提取数据。进入数组操作数组?

我提取的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脚本执行此操作,因为我必须通过bash执行此操作。

1 个答案:

答案 0 :(得分: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。

mapfile将来自进程替换的每一行存储在名为$td的数组变量中。

它将与您的简单html一起使用:

  • 每行td个标记
  • 在同一行开启和关闭td