
逆マッチでファイルを 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 '^[<>]'