GNU/Linux >> Linux の 問題 >  >> Linux

次の行に文字列が含まれていないGrep文字列?

ディレクトリとそのサブディレクトリ内のすべてのファイルで特定の文字列を含む行を検索したいのですが、その直後の行に別の特定の文字列を含む結果を除外したいのです。

例:

foo1 searchString bar
foo1 excludeString bar

foo2 searchString bar
something else

foo3 searchString bar

foo3 excludeString bar

foo4 searchString bar

これを返す必要があります:

foo2 searchString bar
foo3 searchString bar
foo4 searchString bar

-A 複数行を出力し、その-v 結果を除外します。しかし、私の現在のgrep -r -A 1 "searchString" | grep -v "excludeString" 明らかに機能しません。

2番目のgrepに、一致するものが見つかった場合は前の行も削除する必要があることを伝える方法はありますか?または、他の方法でこれを達成できますか?

パフォーマンスは私の主な関心事ではありません。ただし、コマンドが比較的覚えやすいと便利です。

承認された回答:

pを使用できます erl c 互換性のあるr 通常のe xpressions grep

$ pcregrep -M '(searchString.*\n)(?!.*excludeString)' file
foo2 searchString bar
foo3 searchString bar
foo4 searchString bar

searchStringを検索します その後に任意の文字.が続きます 、0回以上繰り返される* 、その後に改行\n のみ ない場合 (?! )パターン.*excludeString その次。オプション-M 複数行に一致させるために存在します。


Linux
  1. テキスト文字列を含まないすべてのファイルを検索するにはどうすればよいですか?

  2. なぜ`exit&`が機能しないのですか?

  3. Lsb_release –文字列をフロートに変換できませんでした:「8.04Lts」?

  1. CentOS/RHEL:マウント コマンドが「mount:does not contain SELinux labels」で失敗する

  2. grep:コマンドが見つかりません

  3. \d は grep の基本式でサポートされていませんか?

  1. 「#」または「;」で始まらない行をgrepする方法は?

  2. x 文字を超える文字列を含むファイルを検索するには、grep を使用しますか?

  3. 自動リピートが機能しない