我想在文件中找到包含两个单词word_1
和word_2
的文件中的行,例如下面的Line A
,但不会出现在Line B
或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正则表达式语法)。
这些命令都不会返回我感兴趣的文件或行。
我做错了什么?
谢谢!
答案 0 :(得分:39)
您希望找到word_1
,随后是任意次,然后是word_2
。那应该是
word_1.*word_2
您似乎正在使用*
,因为它通常用于命令行搜索,但在正则表达式中它是前一个字符的量词,意味着至少匹配它0次。例如,正则表达式a*
将匹配0个或更多a
个,而正则表达式a+
将匹配至少一个a
。
正则表达式字符含义“匹配任何内容”为.
,因此.*
表示“匹配任何内容,无论多少次。请参阅perlrequick以获取有关该主题的简要介绍。” p>