通过bash从html中提取信息

问题描述:

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

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

,并得到

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

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

期待您的回答。 由于提前, 西蒙

+0

您可以使用XSLT .... –

+0

退房XML2命令,如:http://stackoverflow.com/a/7058658/78602 – hipe

这完全awk命令应该工作。对于匹配正则表达式的行,分割为="。拆分像这样在你的榜样行:

  • 第一场将是:<a href=
  • 第二场:[空白]
  • 第三场:show.php?id
  • 第四场:914826
  • 和第五个领域: >Latest Newspaper</a>

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

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

简单得多:'awk -F'[=“]''/show.php\?id=/ {print $ 4}'index.html' AWK为您免费提供第一个分割。 –

使用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 
+0

我会使用grep方式。非常感谢你。有什么教程可以推荐?作为一名Java开发人员,我发现很难找到有关bash的有用信息 – battlepope

+0

@battlepope http://tldp.org/LDP/Bash-Beginners-Guide/html/ – rush

+1

@battlepope:关于bash的最佳实例:http: //tldp.org/LDP/abs/html/ –