29

我想在包含两个单词的文件中查找行,word_1并按word_2顺序查找,Line A如下所示,但不是Line Bor Line C

Line A: ... word_1 .... word_2 .... 
Line B: ... word_1 ....
Line C: ... word_2 ....

我试过了

$ack '*word_1*word_2'
$ack '(word_1)+*(word_2)+'

以及在正则表达式开头附加的相同命令^(试图遵循 Perl 正则表达式语法)。

这些命令都不会返回我感兴趣的文件或行。

我究竟做错了什么?

谢谢!

4

1 回答 1

61

你想找到word_1,然后是任何东西,任意次数,然后是word_2。那应该是

word_1.*word_2

您似乎在使用*它,因为它经常用于命令行搜索,但在正则表达式中,它是前一个字符的量词,意味着匹配它至少 0 次。例如,正则表达式a*将匹配 0 个或多个as,而正则表达式a+将匹配至少一个s a

表示“匹配任何东西”的正则表达式元字符是., 所以.*表示“匹配任何东西,任意次数。有关该主题的简要介绍,请参见perlrequick

于 2011-04-09T21:18:50.010 回答