Der Titel sagt schon alles: Ich möchte diese sauberen farbigen Spalten der Ausgabe von etwas bekommen, wie zum ls -alBeispiel in 10basetoms Antwort auf diese Frage .
sedoder aufteilen awkund 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 -alBeispiel in 10basetoms Antwort auf diese Frage .
sedoder aufteilen awkund eine ANSI-Escape-Sequenz einfügen .
Antworten:
Dies ist machbar mit awk. Da das Format von ls -lnicht 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. FPATDank dieser SO-Antwort können wir dies mit der Option tun :
ls -la | awk '
BEGIN {
FPAT = "([[:space:]]*[^[:space:]]+)";
OFS = "";
}
In awkjeder Positions param ( $1, $2bezieht sich auf einen, etc.) Bereich, dh eine Spalte auf der aktuellen Zeile. Mit der FPATobigen Option wird jedes Feld neu definiert, um alle vorhergehenden Leerzeichen einzuschließen. Wenn Sie printes 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 ( 0zwischen [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 bashSitzung 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 ( $9in meinem Beispiel), awksollten Sie diese durchlaufen.
--color=alwaysist 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 -alFin 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'
tputist ein Dienstprogramm zum Generieren einer Vielzahl von Steuercodes für Ihr Terminal. Legt beispielsweise tput setaf ndie Vordergrundfarbe so fest, ndass nsie zwischen 0 und 7 liegen kann
0 – Black
1 – Red
2 – Green
3 – Yellow
4 – Blue
5 – Magenta
6 – Cyan
7 – White
Weitere Informationen tputund Farbfunktionen finden Sie hier .
Das awk Code definiert Variablen black, redund bluedaß 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 :)
FPATTrick, um den Abstand korrekt zu halten.