Das ist mit machbar awk
. Da das Format von ls -l
nicht angegeben ist, ist es leider nicht möglich, eine Lösung zu finden, die auf jedem System funktioniert. Daher ist auf einigen Systemen eine Anpassung der Farbe für welche Spalte erforderlich.
Zunächst wollen wir die ursprünglichen Räume beibehalten, die von verwendet werden ls -l
. Andernfalls ist die Spaltenausrichtung falsch. Wir können dies FPAT
dank der SO-Antwort mit der Option tun :
ls -la | awk ' BEGIN { FPAT = "([[:space:]]*[^[:space:]]+)"; OFS = ""; }
In bezieht sich awk
jeder Positionsparameter ( $1
, $2
usw.) auf ein Feld, dh eine Spalte in der aktuellen Zeile. Die FPAT
Option oben hat jedes Feld neu definiert, um alle vorhergehenden Leerzeichen einzuschließen. Wenn Sie print
es wieder herausnehmen, werden die Leerzeichen beibehalten, sodass die Spalten an derselben Position bleiben.
Jetzt können wir einfach jedes Feld bearbeiten, um den Farbcode einzufügen, und dann die bearbeitete Ausgabe drucken:
{ $2 = "\033[31m" $2 "\033[0m"; $3 = "\033[36m" $3 "\033[0m"; $4 = "\033[36m" $4 "\033[0m"; $5 = "\033[31m" $5 "\033[0m"; $6 = "\033[36m" $6 "\033[0m"; $7 = "\033[36m" $7 "\033[0m"; $8 = "\033[31m" $8 "\033[0m"; print } '
Beachten Sie, dass danach jede Spalte auf den Standard (das 0
zwischen dem [
und m
) zurückgesetzt wird. Wenn Sie möchten, dass die Farbe über mehrere Spalten verläuft, können Sie den Code weglassen. Ich persönlich bevorzuge es, jede Spalte unabhängig voneinander anzugeben.
Sie können einen wiederverwendbaren Befehl in Ihrem definieren .bashrc
. Zum Beispiel:
lsc() { ls -la | awk ' BEGIN { FPAT = "([[:space:]]*[^[:space:]]+)"; OFS = ""; } { $2 = "\033[31m" $2 "\033[0m"; $3 = "\033[36m" $3 "\033[0m"; $4 = "\033[36m" $4 "\033[0m"; $5 = "\033[31m" $5 "\033[0m"; $6 = "\033[36m" $6 "\033[0m"; $7 = "\033[36m" $7 "\033[0m"; $8 = "\033[31m" $8 "\033[0m"; print } ' }
Sie müssen möglicherweise Ihre bash
Sitzung neu starten (oder ausführen source ~/.bashrc
), damit diese Funktionsdefinition ausgeführt werden kann.
Von hier aus können Sie einfach anrufen lsc
, was Ihnen die gewünschte Ausgabe geben sollte: