
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
grep
ist hier nicht wirklich das richtige Werkzeug für diese Aufgabe, aber ein kurzer Blick darauf grep manpage
sollte helfen (bitte beachten Sie, dass grep
es 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.txt
funktionieren 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