0

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

awk '/show.php\?id=/' index.html

并得到

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

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

期待您的回答。在此先感谢,西蒙

4

2 回答 2

3

使用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
于 2012-07-02T10:25:23.990 回答
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
于 2012-07-02T10:58:58.853 回答