Wenn die Zeilen identisch sind und Sie nur wissen möchten, ob in der einen oder anderen Datei zusätzliche Zeilen vorhanden sind, können Sie sort & diff (und hier die Prozessersetzung) verwenden:
$ diff -B <(sort v1.tcl) <(sort v2.tcl) 2c2,3 < foo1 --- > foo2 > goodbye2
Mit diffs -B
, um leere Zeilen zu ignorieren. Sie könnten dann verwenden grep -n [pattern] file
zu finden, welche Linie das Muster an (vielleicht mit einer oder einer Kombination aus ist grep
, cut
, sed
, awk
), wenn es ankommt.
Hier ist eine vollständigere Antwort, die die Datei und die Zeilennummer mit Übereinstimmungen zeigt. Verwendet nicht sed oder awk, nur bash, cut, grep ... hier ist alles (im Wesentlichen) in einer Zeile:
diff -B <(sort v1.tcl) <(sort v2.tcl) | while read -r line; do if \ echo "$line" | grep -q "^<"; then grep -F -n -H \ "$(echo "$line"|cut -c3-)" v1.tcl ; elif echo "$line" | grep -q \ "^>"; then grep -F -n -H "$(echo "$line"|cut -c3-)" v2.tcl ; fi done
Oder in mehrere Zeilen aufgeteilt:
diff -B <(sort v1.tcl) <(sort v2.tcl) | while read -r line do if echo "$line" | grep -q "^<" then grep -F -n -H "$(echo "$line"|cut -c3-)" v1.tcl elif echo "$line" | grep -q "^>" then grep -F -n -H "$(echo "$line"|cut -c3-)" v2.tcl fi done
Und abhängig von Ihren Eingabedateien (besonders wenn Sie Zeilen mit nachgestellten Backslashes haben), verwende ich diese Optionen für read & grep:
read -r
Erlaube keine Backslashes, um Zeichen zu entkommengrep -F
Interpretieren Sie PATTERN als eine Liste fester Zeichenfolgen (anstelle von regulären Ausdrücken), die durch Zeilenumbrüche getrennt sind, von denen jede abgeglichen werden muss
Wenn Sie die Kommentare von Pimp Juice IT verwenden, erhalten Sie, wenn nachfolgende umgekehrte Schrägstriche zu Zeilen in den Eingabedateien vorhanden sind, den Fehler "file: line Trailing backslash". Wenn Sie die -F
Option für grep verwenden, um den nachfolgenden Backslash-Fehler zu löschen, führt dies zu einer viel kleineren Lösung, die nur für grep gilt:
grep -FvHn -f v2.tcl v1.tcl ;grep -FvHn -f v1.tcl v2.tcl
Verwendete Optionen von grep:
-f
Muster von FILE erhalten, eines pro Zeile.-F
Interpretieren Sie PATTERN als eine Liste fester Zeichenfolgen (anstelle von regulären Ausdrücken), die durch Zeilenumbrüche getrennt sind, von denen jede abgeglichen werden muss-v
Kehren Sie den Sinn der Übereinstimmung um, um nicht übereinstimmende Linien auszuwählen.-H
Drucken Sie den Dateinamen für jede Übereinstimmung-n
Stellen Sie jeder Zeile der Ausgabe die 1-basierte Zeilennummer in ihrer Eingabedatei voran.