2010-03-22 23 views
18

我試圖grep通過嵌套子目錄中的一堆文件來尋找正則表達式匹配;我的正則表達式需要消極的後顧之憂。獲得與GNU grep相當的支持負向反向視圖的最簡單方法是什麼?

Perl有負面的後顧之憂,但據我所知GNU grep doesn't support negative lookbehinds

獲得與GNU grep等價的最簡單方法是支持負反向lookbehinds?

(我想我可以在Perl中編寫我自己的迷你grep,但似乎並不需要這樣做。我的Perl Cookbook副本包含tcgrep的源代碼;是我應該使用的嗎? ,最新版本在哪裏?不要告訴我,我必須輸入整個程序!)

回答

23

使用ack! Ack是用Perl編寫的,因此它使用Perl的正則表達式引擎(默認情況下)。

負向後看是ack "(?<!bad)boy"(維萊爾特每的評論)

+1

我以爲有人可能會提出這個建議,但我不認爲ack使用負面後顧。例如,我在臨時目錄中創建了一個臨時文件,其中包含兩行:「goodboy」和「badboy」,然後使用Perl中的示例:'ack「(?<!= bad)boy」......它返回了兩行。如果正在遵循正則表達式,則只應返回「goodboy」行。 (如果你真的對了,我會扭轉我的失望。) – 2010-03-22 04:34:03

+4

消極的後顧之憂是ack "(?,脫身= willert 2010-03-22 04:39:59

+0

奇怪。我用筆在我的書上寫下來糾正我的錯誤! – 2010-03-22 04:47:24

3

感謝來自其他question評論。我發現在grep中使用-P/--perl-regexp選項可以實驗性地支持負向倒序,所以如果您希望繼續使用grep,則可能仍然不需要使用其他工具。

順便說一句,我的grep的首選替代品是grin(它是用python編寫的)。

相關問題