Ich habe zwei Konfigurationsdateien, das Original aus dem Paketmanager und eine von mir angepasste. Ich habe einige Kommentare hinzugefügt, um das Verhalten zu beschreiben.
Wie kann ich diff
die Konfigurationsdateien ausführen und die Kommentare überspringen? Eine kommentierte Zeile wird definiert durch:
- optionales führendes Leerzeichen (Tabulatoren und Leerzeichen)
- Hash-Zeichen (
#
) - alles andere Zeichen
Der (einfachste) reguläre Ausdruck, der die erste Anforderung überspringt, wäre #.*
. Ich habe die --ignore-matching-lines=RE
( -I RE
) -Option von GNU diff 3.0 ausprobiert , aber ich konnte sie mit dieser RE nicht zum Laufen bringen. Ich habe es auch versucht .*#.*
und .*\#.*
ohne Glück. Das buchstäbliche Setzen von line ( Port 631
) als RE
passt zu nichts und das Setzen des RE zwischen Schrägstriche hilft auch nicht.
Wie in "diff" vorgeschlagen, scheint der Geschmack von Regex zu fehlen? Ich habe versucht grep -G
:
grep -G '#.*' file
Dies scheint mit den Kommentaren übereinzustimmen, aber es funktioniert nicht für diff -I '#.*' file1 file2
.
Wie soll diese Option verwendet werden? Wie kann ich diff
bestimmte Zeilen überspringen lassen (in meinem Fall Kommentare)? Bitte schlagen grep
Sie die Datei nicht vor und vergleichen Sie die temporären Dateien nicht.
diff -I
sich nicht so verhält, wie ich es erwartet habe. Ich habe meine Antwort mit einem Beispiel aktualisiert, das dieses Verhalten für mich verdeutlicht.
-I
Option bewirkt, dass ein Block nur dann ignoriert wird, wenn alle Zeilen mit dem regulären Ausdruck übereinstimmen. Auf diese Weise können Sie nur eine Kommentaränderung ignorieren, nicht jedoch die Kommentaränderungen, die sich in der Nähe einer Nichtkommentaränderung befinden.