コンテキストによる Grep の反転一致

コンテキストによる Grep の反転一致

逆マッチでファイルを grep しようとしていますが、一致する行の直後に出現するすべての行が一致するわけではありません。

したがって、 というファイルには次の内容が含まれますtesting_grep

aaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb
cccccccccccccccccc
dddddddddddddddddd
llllllllllllllllll
dddddddddddddddddd
llllllllllllllllll
fffffffffffffffff
fffffffffffffffff

したがって、そのような一致を含む行とそれに続く行を除くすべての行を一致させたいのでd、次のgrepコマンドを使用します。

 grep -v "d" -A 1 testing_grep.txt 

ただし、必要なのは次の出力だけであるにもかかわらず、すべての行が出力されます。

aaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb
cccccccccccccccccc
fffffffffffffffff
fffffffffffffffff

ご協力いただきありがとうございます。

答え1

GNU sed でこれを試してください:

パターンスペース(現在の行)で、 を含む//行を検索します( )d。それらの行に対してのみ、入力の次の行をパターンスペース(N)に追加し、パターンスペース(d)を削除します。

sed '/d/{N;d;}' testing_grep.txt

出力:

ああああああああ
bbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb
cccccccccccccccccc
ffffffffffffffffffff
ffffffffffffffffffff

答え2

Cyrusはすでに完璧な答えを出していますが、grep(より複雑)でそれをやりたい場合は

不要な行を grep してファイルに置きます。

grep 'd' -A 1 testing_grep.txt > otherfile.txt

otherfile.txt の内容は次のようになります: dddddddddddddddddd llllllllllllllllll dddddddddddddddddd llllllllllllllllll

次に、 diff コマンドを使用して差異を取得します。

diff testing_grep.txt otherfile.txt | grep '^[<>]'

関連情報