所以我为一个关键字运行curl
命令和grep
。
这是(已消毒的)结果:
...Dir');">Town / Village</a></th><th><a href="javascript:SetFilter(3,'ListPublicASDF','ASDFDir');">Phone Number</a></th></tr><tr class="rowodd"><td><a href="javascript:calldialog('ASDF','&Mode=view&helloThereId=42',600,800);"...
我想得到数字42 - 命令行单线程会很棒。
helloThereId=
有没有人对此有任何提示?也许是数字的一些正则表达式?我担心我没有足够的经验来构建一个优雅的解决方案。
答案 0 :(得分:4)
您可以在启用grep
( Perl-Regexp )参数的情况下使用-P
。
$ grep -oP 'helloThereId=\K\d+' file
42
$ grep -oP '(?<=helloThereId=)\d+' file
42
\K
这里实际上做了积极的看法。 \K
使文本与整个正则表达式匹配保持匹配。
<强>参考文献:强>
答案 1 :(得分:2)
如果您的 grep
版本支持-P
,(对于OP来说是正确的,因为它们位于Linux上,它附带 GNU grep
), Avinash Raj's answer是可行的方法。
为了未来读者的潜在利益,以下是替代方案:
如果您的grep
不支持-P
,但 支持-o
,则这是一个实用的解决方案,只需从总体匹配中提取数字第二步,使用=
cut
字段
grep -Eo 'helloThereId=[0-9]+' in | cut -d= -f2 file
最后,如果您的grep
既不支持-P
也不支持-o
,请使用sed
:
这是一个符合POSIX的替代方案,使用sed
和基本正则表达式(因此需要使用+
模拟\{1,\}
并转义括号):< / p>
sed -n 's/.*helloThereId=\([0-9]\{1,\}\).*/\1/p' file
答案 2 :(得分:1)
这适用于任何UNIX操作系统上的任何sed,甚至是Solaris上的pre-POSIX默认sed:
$ sed -n 's/.*helloThereId=\([0-9]*\).*/\1/p' file
42