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

Ame*_*ina 25 regex ack

我想在文件中找到包含两个单词的行,word_1并按word_2顺序排列,例如在Line A下面,但不是在Line BLine C:

Line A: ... word_1 .... word_2 .... 
Line B: ... word_1 ....
Line C: ... word_2 ....
Run Code Online (Sandbox Code Playgroud)

我试过了

$ack '*word_1*word_2'
$ack '(word_1)+*(word_2)+'
Run Code Online (Sandbox Code Playgroud)

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

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

我究竟做错了什么?

谢谢!

dso*_*ano 43

你想要找到word_1,随后是任何东西,然后是word_2.那应该是

word_1.*word_2
Run Code Online (Sandbox Code Playgroud)

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

正则表达式字符意思是"匹配任何东西" .,所以.*意味着"匹配任何东西,无论多少次.请参阅perlrequick以简要介绍该主题.