Perl相当于grep -Eo

时间:2014-07-07 15:17:38

标签: regex perl

在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执行此操作?

2 个答案:

答案 0 :(得分:4)

以下是两种方式:

  1. 在Perl中,特殊变量$&包含正则表达式的匹配部分。

    perl -ne 'print "$&\n" if m#http://[a-z0-9_.-]+/#' < input
    
  2. 如果您的正则表达式包含捕获组,则这些组匹配的模式将分配给变量$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/