Ich wollte die Unix-Dateien bedingt formatieren, arbeite gerade an einem diff
Befehl und wollte wissen, ob es möglich ist, den Text der diff
Befehlsausgabe zu formatieren .
Beispiel:
Übereinstimmende Werte sollten grün angezeigt werden.
Nicht übereinstimmende Werte sollten rot angezeigt werden.
Angenommen, ich habe zwei Dateien file1
und file2
und mein Befehl lautet diff file1 file2
.
Nun wollte ich annehmen, dass die Ausgabe 5 Nichtübereinstimmungen enthält, dann sollten diese Nichtübereinstimmungen in roter Farbe angezeigt werden. Wie erreicht man das mit Unix?
Kurz gesagt: "Ändere die Farbe auf Rot für die Ausgabe des Befehls diff für Werte, die nicht übereinstimmen."
Antworten:
diff --color
Option wurde hinzugefügt GNU diffutils 3.4 (2016-08-08)Dies ist die Standardimplementierung
diff
für die meisten Distributionen, die in Kürze verfügbar sein werden.Auf 3.5 sieht es so aus:
mit:
Ich habe auch Wortebene diff angefordert ab
diff-highlight
bei: [Diffutils-devel] einen Flag In der farbige Ausgabe wie git des diff-h produzieren | lists.gnu.orgAngeblich in commit c0fa19fe92da71404f809aafb5f51cfd99b1bee2 (März 2015) hinzugefügt.
quelle
alias diff='diff --color=auto'
Wenn Sie Zugriff auf GNU haben
diff
, können Sie dessen--X-group-format
Optionen verwenden , um diesen Effekt ohne zusätzliche Tools zu erzielen:Das verwendet ANSI-Farb-Escape-Codes , um Rot und Grün zu erhalten, wobei ANSI-C in der Shell zitiert wird, um auf die Escape -Zeichen zuzugreifen
\e
.--old-group-format
und--new-group-format
identifizieren nicht passenden Linien und legen sie zwischen rot und Farbe Reset - Codes%<
und%>
, während--unchanged-group-format
Einsätze Linien zwischen Grün und Reset - Codes übereinstimmt.Sie können auch verwendet
--old-line-format
werden (usw.), auf Kosten der redundanten Farbe entweicht in jeder Zeile:--old-line-format=$'\e[0;31m%L\e[0m'
.quelle
diff
.Versuchen
colordiff file1 file2
(Zitat aus http://www.colordiff.org/ )
quelle
diff --color=auto
war nur das Kolorieren von Linienmarkierungen und die erste Linie von jeder+
/-
Sektion. Das Weiterleiten anless -SR
erleichtert das Durchsuchen.Farbige Ausgabe auf
diff
WortebeneFolgendes können Sie mit dem folgenden Skript und Diff-Highlight tun :
( Dank an @retraciles Antwort für die
sed
Hervorhebung)quelle
Sie sollten sich den
hl
Befehl unter github:git clone http://github.com/mbornet-hl/hl
und http://www.flashnux.com/notes/page_000022_US.html ansehenhl
ist ein in C geschriebener Linux-Befehl, der speziell zum Färben einer Textdatei oder zur Ausgabe eines Befehls entwickelt wurde. Sie können bis zu 42 Farben gleichzeitig verwenden und mithilfe einer Konfigurationsdatei die Befehlszeilen vereinfachen. Sie können die Ausgabe jedes Befehls einfärben, der an einen anderen Befehl weitergeleitet werden kann. Und wenn Sie wissen, was reguläre Ausdrücke sind, können Sie sie ganz einfach verwenden. Sie können dieman
Seite verwenden, um zu verstehen, wie sie verwendet wird.hl
ist sehr einfach zu bedienen und zu konfigurieren. Sie können sogar das Skript hl_generic verwenden, um die Ausgabe von Befehlen einzufärben , ohne ihre Syntax zu ändern .Sie können beispielsweise die Ausgabe des
diff
Befehls durch Eingabe Ihres üblichen Befehls einfärben:Wenn Sie Hilfe benötigen, senden Sie mir einfach eine E-Mail.
Grüße.
quelle
Es gibt im Moment ein wirklich nettes Tool, das mit Python auf Github erstellt wurde
icdiff
. Erzeugt schöne farbige Ausgaben, die auch den Schweregrad berücksichtigen. Ich benutze es die ganze Zeit, es lohnt sich, es auszuprobieren.quelle
Entweder können Sie verwenden
1.
diff --color=auto file1 file2
2.
colordiff file1 file2
3. Mein Favorit:
git diff file1 file2
implementiert wie folgt :Ich verwende und empfehle derzeit Folgendes, um die Ausgabe entweder zu verwenden
git diff
oder zu leitencolordiff
:diff() { git diff --no-index "$1" "$2" | colordiff; }
quelle
git diff --no-index
auch, aber ich denke, Dateien müssen suchbar sein. (Zumindest funktioniert nicht mit Bash-Prozess-Substitution für mich)git diff
seit langer Zeit und die Datei ist für mich suchbar, sonst würde es keinen Sinn haben, wenn ich es richtig mache.diff --color <(ls | head -n+3) <(ls | tail -n +5)
aber nicht mitgit diff
. Zugegeben, kein alltäglicher Fall oder zu schwierig, um ihn zu umgehen.Nur eine Anmerkung: Um die Ausgabe "nebeneinander" zu erhalten, benötigen Sie "--color = always". Sie können auch mit weniger paginieren und die Farbausgabe beibehalten:
Und noch ein Hinweis: Versuchen Sie, den Schalter "--color = always" am Ende beizubehalten. Grund? Mit dmesg von util-linux 2.27.1:
quelle
Dieses Skript verwendet die Standard-Version 3.4 diff (sollte mit jeder Version von diff funktionieren) und färbt die Ausgabe ein, ohne das Ausgabeformat zu ändern. Es funktioniert mit der neuesten Version von RHEL (Version 7.5) mit GNU diff Version 3.3. Legen Sie es einfach in Ihr ~ / bin-Verzeichnis oder an eine andere Stelle in Ihrem Pfad (ich empfehle, es "cdiff" zu nennen).
quelle
Wenn Sie vim installiert haben, können Sie dies tun
diff file1 file2 | vim -
Vim erkennt das Diff-Format und gibt ihm die richtige Farbe. Der Bindestrich am Ende besteht darin, vim Eingaben vom Befehl diff entgegennehmen zu lassen.
quelle
Farbunterschied auf Zeichenebene : Installieren Sie ccdiff
quelle