So halten Sie die Farbausgabe mit sed

10

Ich verwende den sedBefehl und möchte die farbige Ausgabe des vorherigen Befehls beibehalten. Die Ausgabe von lsist farbig, die Ausgabe von sed jedoch nicht. Ich benutze OSX.

ls -la | sed -En  '/Desktop/q;p'
Johniak
quelle

Antworten:

13

Unter macOS ist das lskein GNU lsund akzeptiert nicht die --color=alwaysOption, die Linux-Benutzer für diese Funktionalität erwarten.

In der macOS-Version von lswerden die Farben durch zwei Variablen gesteuert : $CLICOLORund $CLICOLOR_FORCE. Wenn ersteres definiert ist, das von spezifizierte Terminal $TERMFarbe unterstützt und die Ausgabe an ein Terminal erfolgt, wird diese Ausgabe farbig, ähnlich wie bei der --color=autoOption von GNU . Wenn auch die letztere Variable definiert ist, wird die endgültige Bedingung gelöscht und verhält sich wie bei GNUs --color=always.

Um Farbe zu erhalten sed, benötigen Sie etwa Folgendes:

CLICOLOR_FORCE=1 ls -la | sed -En '/Desktop/q;p'
Fuchs
quelle
macOS lshat die -GOption, auch Farbe zu aktivieren, aber ich bin mir nicht sicher, wie es sich in einer Pipeline verhält.
8bittree
2
@ 8bittree Passing -Gist gleichbedeutend mit Definition $CLICOLOR(und daher nicht ausreichend)
Fox
6

Ich werde blind erraten , dass Ihre Verteilung, wie viele ein Alias hat , die Karten lszu ls --color=auto. ls -la --color=always | sed …sollte arbeiten.

(Mit dieser autoEinstellung wird im Großen und Ganzen lsüberprüft, ob die Ausgabe auf dem Display angezeigt wird oder nicht, und nur die Farbe für das Display. Der Grund dafür ist, dass die Farbe durch Escape-Sequenzen, dh unsichtbare Befehlszeichen, realisiert wird, sodass ein Programm sie möglicherweise verwirren kann für einen Teil des Dateinamens solche Dinge.)

Ulrich Schwarz
quelle
3
Die blinde Vermutung ist falsch. OSX ist keine Linux-Distribution und verwendet kein GNU-Userland
Fox