2011-05-31 59 views
6

是否有可能(以及如何)将模式与ack(ack-grep在Linux的某些发行版上)链接起来,就像我习惯于使用grep一样?ack-grep有多种模式?

例如

grep "foo" somefile.c | grep -v "bar" 

...匹配所有带有“foo”但没有“bar”的行。

回答

10

ack使用Perl的正则表达式,而那些允许lookahead assertions

^(?!.*bar).*foo.*$ 

将匹配包含foo但不包含bar线。

我不熟悉的ack使用,但这样的事情应该工作:

ack '^(?!.*bar).*foo.*$' myfile 
+0

这里的问题是,如果文件没有'bar'在里面,对于'FOO搜索'甚至没有尝试过。 – 2015-11-24 18:01:50

+0

@AnthonyHatzopoulos:为什么会这样呢? – 2015-11-24 18:06:37

+0

OP正在寻找带有foo的线条。然后他们不想把这些线条放回去。我认为这件事发生的恰恰就是该文件中有条形码,他们得到了他们想要的东西。虽然它不会仅以foo返回文件。假设我正在寻找所有'foo()'而不是'foo(bar)',我仍然想要所有其他* foos *。在我的例子中'somefile.c'是一个完整的项目。尽管它值得一提。 – 2015-11-24 18:16:04