我有一个html文件,其中一些是“缩小”的,这意味着整个网站只能在一行中。
我想过滤包含数字的?idsite=
的值。所以html包含这样的内容:img src="//stats.domains.com/piwik.php?idsite=44
。
因此普通输出应为“44”。
我尝试了grep,但它回显整行,只是突出了价值。
答案 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
如果您需要解释正在发生的事情,请告诉我。