在shell脚本中,grep -Eo {regex} {file}
返回正则表达式的匹配部分。例如:
$ echo \
'For support, visit <http://www.example1.com/support>
You can also visit <http://www.example2.com/products> for information.'
| grep -Eo 'http://[a-z0-9_.-]+/'
http://www.example1.com/
http://www.example2.com/
我如何使用Perl执行此操作?
答案 0 :(得分:4)
以下是两种方式:
在Perl中,特殊变量$&
包含正则表达式的匹配部分。
perl -ne 'print "$&\n" if m#http://[a-z0-9_.-]+/#' < input
如果您的正则表达式包含捕获组,则这些组匹配的模式将分配给变量$1
,$2
,...
perl -ne 'print "$1\n" if m#(http://[a-z0-9_.-]+/)#' < input
答案 1 :(得分:3)
要获得-o
功能,我建议如下:
echo abcdabcd | perl -lne 'while ($_ =~ s/(bc)//){print $1}'
bc
bc
echo abcdabcd | grep -Eo 'bc'
bc
bc
但是对于你的例子,我建议perl -pe 's|(http://[\w-\.]+/).*|$1|g'
:
echo 'http://www.example1.com/support' | perl -pe 's|(http://[\w-\.]+/).*|$1|g'
http://www.example1.com/