从命令行打印正则表达式的所有匹配项?

jon*_*rry 4 regex perl grep

在unix命令行上将所有匹配(每个匹配一行或每行输入一行)打印到正则表达式的最简单方法是什么?请注意,每行输入可能有0个或多个匹配.

我假设必须有一些方法可以使用sed,awk,grep和/或perl来实现这一点,我希望有一个简单的命令行解决方案,以便将来在需要时显示在我的bash历史记录中.

编辑:澄清一下,我不想打印所有匹配的行,只打印正则表达式的匹配.例如,一行可能有1000个字符,但正则表达式只有两个10个字符的匹配项.我只对这两个10个字符的比赛感兴趣.

yst*_*sth 13

假设你只使用非捕获括号,

perl -wnE'say /yourregex/g'
Run Code Online (Sandbox Code Playgroud)

要么

perl -wnE'say for /yourregex/g'
Run Code Online (Sandbox Code Playgroud)

样品用途:

$ echo -ne 'fod,food,fad\nbar\nfooooood\n' | perl -wnE'say for /fo*d/g'
fod
food
fooooood
$ echo -ne 'fod,food,fad\nbar\nfooooood\n' | perl -wnE'say /fo*d/g'
fodfood

fooooood
Run Code Online (Sandbox Code Playgroud)

  • 刚注意到`grep -o'fo*d'input.txt`似乎也能正常工作.如果需要,可以使用`--color = never`删除颜色. (2认同)

Tom*_*ard 6

除非我误解了你的问题,否则以下方法都可以解决问题

grep -o 'fo.*d' input.txt
Run Code Online (Sandbox Code Playgroud)

有关更多详情,请参阅

  • [`ack -o`](http://betterthangrep.com)和GNU`grep -o`将仅显示匹配的部分.将后者与`-P`结合用于Perl风格的正则表达式. (3认同)