从html文件或curl输出中提取字符串

时间:2015-02-18 01:59:20

标签: regex bash perl awk sed

我有一个html文件,其中一些是“缩小”的,这意味着整个网站只能在一行中。

我想过滤包含数字的?idsite=的值。所以html包含这样的内容:img src="//stats.domains.com/piwik.php?idsite=44

因此普通输出应为“44”。

我尝试了grep,但它回显整行,只是突出了价值。

4 个答案:

答案 0 :(得分:0)

使用perl可能类似于:

 echo "Whole bunch of stuff  \                                        
  img src=\"stats.domains.com/piwik.php?idsite=44\" " \
  | perl -nE 'say /.*idsite=(..)\"/ '

(假设idsite总是两个字符!: - )。你的正则表达式需要比最有可能的更复杂。)

将代码段from the page you reference above放入HTML文件(非缩小)并将44替换为参数变量,这个perl位将提取" 44":

 perl -nE 'say /.*idsite=(..)/ if /idsite/ ' idsite.html

将一个班轮转换为sed命令行将类似:

echo "Whole bunch of stuff  \                                        
 img src=\"stats.domains.com/piwik.php?idsite=44\" " \
 | sed -En "s/^.*idsite=(..)\"/\1/p"

这是来自FreeBSD的POSIXsed(应该适用于OSX)-E开关是要添加"现代"正则表达式。

awk中进行此操作留作另一个社区成员的练习: - )

答案 1 :(得分:0)

这是一种perl方法,只提取字符串的尾随数字,如src =“// stats.domains.com/piwik.php?idsite=44”并在bash命令行上运行:

echo $src|perl -ne '$_ =~m /(\d+$)/; print $1'

这是一种做同样事情的python方法:

import re
print ', '.join( re.findall(r'\d+$', src))

如果要处理很多src字符串,最好在使用Python时编译正则表达式,如下所示:

import re
p = re.compile('\d+$')
print ', '.join(p.findall(src))

导入和编译只需要完成一次。

这是一种Ruby方法:

puts src.scan( /\d+$/ ).first

在所有情况下,正则表达式以“$”结尾,匹配字符串的结尾。这就是为什么它们只匹配并提取字符串末尾的数字(\ d +)。

答案 2 :(得分:0)

如果您不需要检查idsite是否属于src属性的值,那么您需要的只是

perl -nE'say $1 if /\bidsite=(\d+)' myfile.html

答案 3 :(得分:0)

$ cat site.html
lorem ipsum idsite='4934' fasdf a
other line

$ sed -n  '/idsite/ { s/.*idsite=\([0-9]\+\).*$/\1/; p }' < site.html
4934

如果您需要解释正在发生的事情,请告诉我。