Ich verwende den sed
Befehl und möchte die farbige Ausgabe des vorherigen Befehls beibehalten. Die Ausgabe von ls
ist farbig, die Ausgabe von sed jedoch nicht. Ich benutze OSX.
ls -la | sed -En '/Desktop/q;p'
Unter macOS ist das ls
kein GNU ls
und akzeptiert nicht die --color=always
Option, die Linux-Benutzer für diese Funktionalität erwarten.
In der macOS-Version von ls
werden die Farben durch zwei Variablen gesteuert : $CLICOLOR
und $CLICOLOR_FORCE
. Wenn ersteres definiert ist, das von spezifizierte Terminal $TERM
Farbe unterstützt und die Ausgabe an ein Terminal erfolgt, wird diese Ausgabe farbig, ähnlich wie bei der --color=auto
Option 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'
ls
hat die-G
Option, auch Farbe zu aktivieren, aber ich bin mir nicht sicher, wie es sich in einer Pipeline verhält.-G
ist gleichbedeutend mit Definition$CLICOLOR
(und daher nicht ausreichend)Ich werde blind erraten , dass Ihre Verteilung, wie viele ein Alias hat , die Karten
ls
zuls --color=auto
.ls -la --color=always | sed …
sollte arbeiten.(Mit dieser
auto
Einstellung wird im Großen und Ganzenls
ü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.)quelle