grep mithilfe einer Datei

grep mithilfe einer Datei

Ich habe 2 Dateien und möchte den Unterschied finden und nur das ausgeben, was nicht in ex2 enthalten ist

Wenn ich verwende grep -Ff ex2.txt ex1.txt, wird mir angezeigt a b c d, dass es keine Ausgabe gibt, wenn ich denselben Befehl mit verwende -v. Warum gibt der erste Befehl auch mit aus d?

Was wäre der einfachste Weg, dies zu tun? Ist grep dafür geeignet? Vielleicht diff, vielleicht ein Skript, das jede Zeile liest und ausgibt, ob sie da ist oder nicht?

cat ex1.txt
a
b
c
d

cat ex2.txt
a
b
c

Bearbeiten – meine Ausgabe sieht folgendermaßen aus:

cat ex2.txt
a
b
c

cat ex1.txt
a
b
c
d

grep -vf ex2.txt ex1.txt

grep -f ex2.txt ex1.txt
a
b
c
d

Antwort1

grepist hier nicht wirklich das richtige Werkzeug für diese Aufgabe, aber ein kurzer Blick darauf grep manpagesollte helfen (bitte beachten Sie, dass grepes zwischen den Distributionen ziemlich große Unterschiede geben kann, da einige standardmäßig GNU und andere etwas anderes verwenden).

  • -F ... Feste Zeichenfolgen (durch Zeilenumbrüche getrennt) – (Kategorie: Matcher-Auswahl)
  • -f ... Dateiname (Kategorie: passendes Steuerelement)
  • -v ... Übereinstimmung umkehren (Kategorie: Übereinstimmungskontrolle)

Man könnte also annehmen, dass so etwas grep -Fvf ex2.txt ex1.txtfunktionieren würde. Allerdingsdas ist keine gute Lösung, da Sie dafür bereits vor dem Start etwas über die Dateien wissen müssen. Es gibt bessere Tools (wie Varianten von diff), die Ihnen spezifischere und genauere Unterschiede zwischen Dateien und/oder Verzeichnissen bieten.

Bearbeiten: Feste Zeichenfolgen, keine Fire-Zeichenfolgen (zum Teufel mit der automatischen Beschädigung)

Antwort2

Versuchen Sie, die Reihenfolge der Dateien zu ändern:

grep -v -f ex2.txt ex1.txt
> d

Antwort3

Ihr Fehler kann nicht reproduziert werden:

cat ex2.txt 
a
b
c

cat ex1.txt 
a
b
c
d

grep -vf ex2.txt ex1.txt 
d

grep -f ex2.txt ex1.txt 
a
b
c

grep -Ff ex2.txt ex1.txt 
a
b
c

grep -vFf ex2.txt ex1.txt 
d

grep -V
grep (GNU grep) 2.20

lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 8.5 (jessie)
Release:    8.5
Codename:   jessie


Bearbeiten(unter OS X mit BSD grep):

cat ex2.txt 
a
b
c

cat ex1.txt 
a
b
c
d

grep -f ex2.txt ex1.txt 
a
b
c

grep -vf ex2.txt ex1.txt 
d

grep -Ff ex2.txt ex1.txt 
a
b
c

grep -v -Ff ex2.txt ex1.txt 
d

grep -V
grep (BSD grep) 2.5.1-FreeBSD

verwandte Informationen