ack regex:在同一行中按顺序匹配两个单词

时间:2011-04-09 20:42:18

标签: regex ack

我想在文件中找到包含两个单词word_1word_2的文件中的行,例如下面的Line A,但不会出现在Line BLine 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正则表达式语法)。

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

我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:39)

您希望找到word_1,随后是任意次,然后是word_2。那应该是

word_1.*word_2

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

正则表达式字符含义“匹配任何内容”为.,因此.*表示“匹配任何内容,无论多少次。请参阅perlrequick以获取有关该主题的简要介绍。” p>