Der Titel sagt schon alles: Ich möchte diese sauberen farbigen Spalten der Ausgabe von etwas bekommen, wie zum ls -al
Beispiel in 10basetoms Antwort auf diese Frage .
sed
oder aufteilen awk
und eine ANSI-Escape-Sequenz einfügen .
Der Titel sagt schon alles: Ich möchte diese sauberen farbigen Spalten der Ausgabe von etwas bekommen, wie zum ls -al
Beispiel in 10basetoms Antwort auf diese Frage .
sed
oder aufteilen awk
und eine ANSI-Escape-Sequenz einfügen .
Antworten:
Dies ist machbar mit 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, sodass auf einigen Systemen eine Anpassung der Farbe für welche Spalte erforderlich ist.
Zunächst möchten wir die ursprünglichen Räume beibehalten, die von verwendet werden ls -l
. Andernfalls ist die Spaltenausrichtung falsch. FPAT
Dank dieser SO-Antwort können wir dies mit der Option tun :
ls -la | awk '
BEGIN {
FPAT = "([[:space:]]*[^[:space:]]+)";
OFS = "";
}
In awk
jeder Positions param ( $1
, $2
bezieht sich auf einen, etc.) Bereich, dh eine Spalte auf der aktuellen Zeile. Mit der FPAT
obigen Option wird jedes Feld neu definiert, um alle vorhergehenden Leerzeichen einzuschließen. Wenn Sie print
es also zurücksetzen, 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 jede Spalte anschließend auf die Standardeinstellungen ( 0
zwischen [
und m
) zurückgesetzt wird. Wenn die Farbe mehrere Spalten umfassen soll, können Sie diesen Code weglassen. Ich persönlich bevorzuge es, jede Spalte einzeln anzugeben.
Sie können den Befehl a wiederverwendbar 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
}
'
}
Möglicherweise müssen Sie 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
, um die gewünschte Ausgabe zu erhalten:
--color=always
. Solange Sie keine unterschiedlichen Farben auf die Dateinamensspalte anwenden ( $9
in meinem Beispiel), awk
sollten Sie diese durchlaufen.
--color=always
ist eine GNU-Erweiterung. Wenn Sie also auf einem Nicht-GNU-System (z. B. macOS, andere BSDs) arbeiten, müssen Sie entweder die GNU-Version installieren oder eine Alternative verwenden .
Dadurch wird die zweite Spalte ls -alF
in Rot, die dritte bis achte in Blau und die neunte in Schwarz gedruckt :
ls -alF | awk -v black=$(tput setaf 0) -v red=$(tput setaf 1) -v blue=$(tput setaf 4) '{$2=red $2; $3= blue $3; $9=black $9} 1'
Dies ist nur als Beispiel gedacht. Sie können dies nach Herzenslust anpassen.
Für diejenigen, die ihren Code bevorzugen, der über mehrere Zeilen verteilt ist:
ls -alF | awk -v black=$(tput setaf 0) \
-v red=$(tput setaf 1) \
-v blue=$(tput setaf 4) \
'{
$2=red $2
$3= blue $3
$9=black $9
}
1'
tput
ist ein Dienstprogramm zum Generieren einer Vielzahl von Steuercodes für Ihr Terminal. Legt beispielsweise tput setaf n
die Vordergrundfarbe so fest, n
dass n
sie zwischen 0 und 7 liegen kann
0 – Black
1 – Red
2 – Green
3 – Yellow
4 – Blue
5 – Magenta
6 – Cyan
7 – White
Weitere Informationen tput
und Farbfunktionen finden Sie hier .
Das awk Code definiert Variablen black
, red
und blue
daß den Anschluß enthält Codes für schwarz, rot und blau ist. Diese Codes stehen am Anfang jeder Spalte, die wir einfärben möchten.
Ein Trick ist, dass Farbcodes nicht von selbst zurückgesetzt werden. Unabhängig von der letzten Farbe, die Sie in einer Zeile angeben, ist die Standardfarbe für die nächste Zeile, sofern kein anderer Farbbefehl angegeben ist.
awk
! Ich würde vorschlagen, dass Sie das Muster einschließen, um auch die Spaltenausrichtung beizubehalten :)
FPAT
Trick, um den Abstand korrekt zu halten.