Grep 如何在第一场比赛后停止ack?

Grep 如何在第一场比赛后停止ack?,grep,ack,Grep,Ack,我试图在文件中查找模式。下面的示例如下所示: aaa; bbb; 如果我尝试以下操作,它不会停止: cat test | tr -d '\n' | ack -1 'aa.*;' aaa;bbb; 有没有办法阻止aaa 这就是诀窍: ack -1 -io 'a[^;]+;' 您的正则表达式是贪婪的,因此它包含第二个a之后直到最后分号的所有文本。如果您对模式进行优化,使其不带问号,并使用-o选项,您将得到您所期望的结果: $cat test.txt | tr -d '\n' | ack -o

我试图在文件中查找模式。下面的示例如下所示:

aaa;
bbb;
如果我尝试以下操作,它不会停止:

cat test | tr -d '\n' | ack -1 'aa.*;'
aaa;bbb;

有没有办法阻止aaa

这就是诀窍:

 ack -1 -io 'a[^;]+;'
您的正则表达式是贪婪的,因此它包含第二个a之后直到最后分号的所有文本。如果您对模式进行优化,使其不带问号,并使用-o选项,您将得到您所期望的结果:

$cat test.txt | tr -d '\n' | ack -o 'aa.*?;' 
aaa;

查看更多配方/详细信息

请将该示例输入的所需输出添加到您的问题中。它已添加,可能您需要更多突出显示?谢谢,我错过了。这可能会有所帮助:head-n 1 test我要查找的模式不在第一个位置。它可以在文件的中间。ACK不支持多行模式匹配,其他答案建议,从文件中删除新行是查找可以跨越多行的模式的唯一方法。