2

文字列内の単語を検索したいのですが、プレフィックスで始まらない場合に限ります。

例えば。

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

しかし、それは私が必要とする結果を生み出しません。私が間違っていることは何ですか?

4

6 に答える 6

1

正規表現で NegativeLookAhead(?!)を NegativeLookBehindに置き換えてみてください(?<!)

(?<!CMD_DO\(")APP_PERFORM_TASK

ここで実際にこれを確認してください

于 2013-10-07T19:30:36.197 に答える
1

簡単な方法は次のとおりです。

--invert-match (別名 -v) フラグを使用して CMD_DO を無視し、結果を BLAH のみに一致する 2 番目の grep にパイプします。

grep -v CMD_DO dummy | grep BLAH
于 2013-10-07T20:56:20.587 に答える
1

あなたのコメントに基づいて:Let's concentrate on command line tool grep

これは、スイッチgrepを使用しないソリューションです-P(正規表現のようなperl):

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

スイッチとgrepを使用したソリューションは次のとおりです。-Pnegative lokbehind

grep -P '(?<!^CMD_DO\(")APP_PERFORM_TASK' file
于 2013-10-07T20:36:03.713 に答える
0

望ましい形式と望ましくない形式の両方で入力行を処理するには、次のようにします。

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

awkで次のようなものが必要になります(gensub()にGNU awkを使用):

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

つまり、文字列の不要な出現をすべて取り除き、残っているものをテストします。

于 2013-10-08T00:08:17.137 に答える