Gibt es ein grep-ähnliches Dienstprogramm, mit dem ich mit logischen Operatoren grep-Suchen durchführen kann? Ich möchte in der Lage sein, die logischen Konstrukte frei zu nisten und zu kombinieren. Zum Beispiel sollte so etwas möglich sein:
grep (term1 && term2) || (term1 && (term3 xor term4)) *
Mir ist klar, dass dies mit Vanilla Grep und zusätzlichem Bash-Scripting möglich ist, aber mein Ziel ist es, dies zu vermeiden.
-E
ist nicht ganz gleichbedeutend mit&&
aufgrund der Tatsache, dass es auftragssensitiv istgrep foo | grep bar
ist eine allgemeinere Möglichkeit, UND zu tun.Du könntest perl benutzen:
quelle
Ich glaube, das erreicht, was du versuchst zu tun. Es
d
wird jede Zeile, die nicht übereinstimmtterm1
,b
aus der Ausgabe entfernt, alle verbleibenden und übereinstimmendenterm2
Zeilen werden aus dem Skript entfernt (und automatisch gedruckt) , und bei verbleibenden Zeilen werden alle nicht übereinstimmendenterm3
und alle übereinstimmenden Zeilen gelöschtterm4
.sed
Skripte werden nacheinander ausgewertet, und alle Tests sind boolesche Werte. Alle aus einem Test resultierenden Aktionen wirken sich daher direkt auf das Verhalten der folgenden Aktionen aus.quelle
Ich verwende, um
grep
Befehle zu verketten, um ein logisches UND zu erreichen:Ich glaube, es ist ziemlich unkompliziert, Unix-artig und elegant.
Dann können Sie (wie @Tushi ausführlich erklärt) mit der
-E
Option zum ODER-Verknüpfen und-v
zum Negieren kombinieren .Ihr spezielles Beispiel ist ziemlich böse und würde wahrscheinlich von einem leistungsstärkeren Dienstprogramm profitieren (siehe @ murus Antwort).
quelle