2013-10-07 66 views
0

我想查找字符串中的單詞,但前提是不以前綴開頭。例如正則表達式:找到不以某個前綴開始的字符串

我想找到APP_PERFORM_TASK的全部出場,但只有當他們沒有開始CMD_DO(」

所以,

CMD_DO("APP_PERFORM_TASK") <- OK (i don't need to know about this) 
BLAH("APP_PERFORM_TASK")  <-- NOT OK, this should match my search. 

我試過的前綴:

(?!CMD_DO\(")APP_PERFORM_TASK 

但是這並不會產生我需要的結果我做錯了什麼?

+0

什麼語言/引擎? –

+0

我只是在尋找正則表達式。沒什麼特別。 – JasonGenX

+0

但你有什麼似乎工作:http://rubular.com/r/eKNxWoSLf8 –

回答

0

下面是一個簡單的方法:

使用--invert匹配(也稱爲-v)標誌忽略CMD_DO並將結果傳遞給第二個grep,它只匹配BLAH:

grep -v CMD_DO dummy | grep BLAH 
0

嘗試更換Nega tiveLookAhead (?!)與NegativeLookBehind (?<!)在你的正則表達式

(?<!CMD_DO\(")APP_PERFORM_TASK 

檢查這個動作here

0

試試這個

(?!CMD_DO\(").*APP_PERFORM_TASK.* 
0

基於您的評論:Let's concentrate on command line tool grep

這裏是grep的解決方案,而無需使用-P開關(perl像正則表達式):

grep 'APP_PERFORM_TASK' file | grep -v '^CMD_DO("' 

下面是使用-P開關和negative lokbehindgrep解決方案:

grep -P '(?<!^CMD_DO\(")APP_PERFORM_TASK' file 
0

要處理的輸入線與兩個受歡迎和不受歡迎的形式,如:

CMD_DO("APP_PERFORM_TASK") BLAH("APP_PERFORM_TASK") 

你需要在awk中這樣的事情(使用GNU AWK的gensub()):

awk -v s="APP_PERFORM_TASK" 'gensub("CMD_DO\\(\\""s,"","") ~ s' file 

即得擺脫所有不想要的字符串,然後測試剩下的是什麼。

0

awk版本

awk '/APP_PERFORM_TASK/ && !/^CMD_DO/' file 
相關問題