Ich möchte alle Dateien innerhalb eines Verzeichnisses und seiner Unterverzeichnisse nach Zeilen durchsuchen, die eine bestimmte Zeichenfolge enthalten, aber ich möchte diejenigen Ergebnisse ausschließen, die unmittelbar danach eine andere bestimmte Zeichenfolge in der Zeile enthalten.
Zum Beispiel das:
foo1 searchString bar
foo1 excludeString bar
foo2 searchString bar
something else
foo3 searchString bar
foo3 excludeString bar
foo4 searchString bar
sollte dies zurückgeben:
foo2 searchString bar
foo3 searchString bar
foo4 searchString bar
Ich weiß, dass -A
mehrere Zeilen gedruckt werden und das -v
Ergebnisse ausschließt. Aber meine derzeitige Herangehensweise grep -r -A 1 "searchString" | grep -v "excludeString"
kann offensichtlich nicht funktionieren.
Gibt es eine Möglichkeit, dem zweiten grep mitzuteilen, dass die vorherige Zeile ebenfalls entfernt werden soll, wenn eine Übereinstimmung gefunden wird? Oder auf eine andere Weise, wie ich das erreichen könnte?
Leistung ist nicht mein Hauptanliegen; Es wäre schön, wenn der Befehl relativ leicht zu merken ist.
-m
, um einen "Cursor" aus dem ersten Grep zu pflegen und dann den zweiten Grep auszuführen. Wenn Sie dies in eine Schleife einfügen, erhalten Sie möglicherweise die gewünschte Funktionalität.