通过bash从html中提取信息

时间:2012-07-02 10:21:42

标签: html linux bash parsing awk

我正在尝试编写一个可以从大型html文件中提取信息的bashscript。我需要这个每天早上自动下载最新的报纸:)。 要下载最新报纸,我必须知道它的ID。为了得到它,我必须解析指向它的链接。 我设法提取行,用

保存带有awk的id
awk '/show.php\?id=/' index.html

并获取

<a href="show.php?id=914826">Latest Newspaper</a>

所以我需要的是“914826”。这就是我被卡住的地方......我不认为我可以使用awk来提取整行,而不是片段。

期待您的回答。 提前致谢, 西蒙

2 个答案:

答案 0 :(得分:2)

使用grep

grep -o 'id=[0-9]*'

示例:

$ echo '<a href="show.php?id=914826">Latest Newspaper</a>' | grep -o 'id=[0-9]*'
id=914826

你可以用perl或sed做同样的事情:

$ echo '<a href="show.php?id=914826">Latest Newspaper</a>' | perl -pe 's/.*id=([0-9]*).*/$1/'
914826

答案 1 :(得分:1)

这个完整的awk命令应该有效。对于与正则表达式匹配的行,请在="中进行拆分。在您的示例行中像这样拆分:

  • 第一个字段为:<a href=
  • 第二栏:[空白]
  • 第三栏:show.php?id
  • 第四栏:914826
  • 第五个字段:>Latest Newspaper</a>

所以打印第四个(arr[4]):

awk '
    /show.php\?id=/ { 
        split( $0, arr, /[="]/ ); 
        print arr[4] 
    }
' index.html