Wie filtere ich Zeilen einer Befehlsausgabe heraus, die in einer Textdatei vorkommen?

15

Nehmen wir an, wir haben eine Textdatei mit verbotenen Zeilen forbidden.txt. Was ist eine kurze Möglichkeit, um alle Zeilen einer Befehlsausgabe zu filtern, die in der Textdatei vorhanden sind?

cat input.txt | exclude-forbidden-lines forbidden.txt | sort
danijar
quelle
4
fgrep -vxf forbidden.txt input.txt | sort
Satō Katsura

Antworten:

26

Verwenden Sie grepwie folgt:

$ grep -v -x -F -f forbidden.txt input.txt

Diese lange Liste von Optionen grepbedeutet

  • -vInvertieren Sie den Sinn der Übereinstimmung, dh suchen Sie nach Dingen, die nicht übereinstimmen.
  • -xWenn Sie ein Muster abgleichen, müssen Sie sicherstellen, dass das Muster mit der gesamten Linie übereinstimmt , dh nicht irgendwo auf der Linie.
  • -FBehandeln Sie ein gefundenes Muster als festen String , also nicht als regulären Ausdruck.
  • -fLiest Muster aus der angegebenen Datei ( forbidden.txt).

sortLeiten Sie das dann weiter oder was auch immer Sie damit machen möchten.

Kusalananda
quelle