
Ich versuche, eine Datei mit invertierter Übereinstimmung zu greppen, aber es stimmt auch nicht jede Zeile überein, die direkt nach den übereinstimmenden Zeilen auftritt.
Ich habe also den folgenden Inhalt in einer Datei namens testing_grep
:
aaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb
cccccccccccccccccc
dddddddddddddddddd
llllllllllllllllll
dddddddddddddddddd
llllllllllllllllll
fffffffffffffffff
fffffffffffffffff
Ich möchte also alle Zeilen außer denen abgleichen, die Folgendes enthalten, d
sowie die nächste Zeile, die auf eine solche Übereinstimmung folgt. Daher habe ich den folgenden grep
Befehl:
grep -v "d" -A 1 testing_grep.txt
Allerdings werden weiterhin alle Zeilen ausgegeben, obwohl ich nur die folgende Ausgabe benötige:
aaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb
cccccccccccccccccc
fffffffffffffffff
fffffffffffffffff
Vielen Dank für jede Hilfe.
Antwort1
Versuchen Sie dies mit GNU sed:
Suche ( ) im Musterraum (aktuelle Zeile) //
nach einer Zeile, die enthält d
. Nur für diese Zeilen füge die nächste Eingabezeile an den Musterraum an ( N
) und lösche den Musterraum ( d
).
sed '/d/{N;d;}' testing_grep.txt
Ausgabe:
aaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbb cccccccccccccccccc ffffffffffffffff ffffffffffffffff
Antwort2
Cyrus hat Ihnen bereits die perfekte Antwort gegeben, aber wenn Sie es mit grep machen wollen (was komplizierter ist)
Sie greppen die Zeilen, die Sie nicht wollen, und legen sie in einer Datei ab:
grep 'd' -A 1 testing_grep.txt > otherfile.txt
Der Inhalt von otherfile.txt wird sein:
dddddddddddddddddd llllllllllllllllll dddddddddddddddddd llllllllllllllllll
Anschließend verwenden Sie den Befehl „diff“, um die Differenz zu ermitteln:
diff testing_grep.txt otherfile.txt | grep '^[<>]'