Ich versuche, eine Grep-Suche zu erstellen, die den Begriff einschließen und einen anderen Begriff ausschließen muss. Ich versuche, mehrere -E-„Muster“-Optionen zu verwenden, aber das hat nicht funktioniert.
Hier ist ein Beispiel für einen Befehl, den ich ausprobiert habe.
grep -Ei "\,17\:31" | grep -Eiv "10\.10\.210\.154" file.csv
aber die Ausgabeergebnisse entsprechen nur der zweiten Einschränkung grep -Eiv "10.10.210.154"
Antwort1
Angenommen, Sie möchten finden \,17\:31
, aber nicht von IP10\.10\.210\.154
Dies kannst du verwenden.
grep -Ei "\,17\:31" file.csv | grep -Eiv "10\.10\.210\.154"
Antwort2
Notiz:die andere Antwortsollte funktionieren, erklärt aber nichts; daher meine erklärende Antwort.
Sie haben dem zweiten gesagt , grep
er solle lesen file.csv
, also tut er das. Er ignoriert seine Standardeingabe, weil dies das ist, was er grep
tut, wenn er mit Dateien arbeitet.
Tatsächlich grep
verhält sich der zweite so, als wäre der erste nicht vorhanden. Er wird beendet, nachdem die Datei verarbeitet und die Ausgabe (sofern vorhanden) gedruckt wurde.
Der erste grep
wartet auf eine Eingabe (normalerweise über die Tastatur, wenn er in einer interaktiven Shell ausgeführt wird). Er kann viele Zeilen annehmen und sogar viele (passende) Zeilen auf seiner Standardausgabe drucken, bis der Pipe-Puffer entscheidet, die Ausgabe an den zweiten weiterzuleiten grep
. Wenn der zweite dann grep
nicht mehr vorhanden ist, grep
wird der erste benachrichtigt, dass die Pipe defekt ist; er wird beendet.
Oder Sie können Ctrl+ drücken D, um das Ende der Eingabe anzuzeigen; oder Sie können Ctrl+ drücken C, um das erste grep
(und das zweite, falls es noch aktiv ist) zu beenden. Dies wird Ihren Datenfluss jedoch nicht reparieren.
Ein richtiger Datenfluss sieht folgendermaßen aus: Der Erste muss grep
die Datei lesen und dann das Ergebnis an den Zweiten weiterleiten:
grep -Ei "\,17\:31" file.csv | grep -Eiv "10\.10\.210\.154"
# or
<file.csv grep -Ei "\,17\:31" | grep -Eiv "10\.10\.210\.154"
Die letztere Syntax hat mindestens einen Vorteil, der am Ende erläutert wird.dies ist eine weitere Antwort von mir.