2011-05-31 92 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