bash: colorizza la seconda colonna di output


8

diciamo, ho il seguente output da ls:

$ ls -lAhF /bin
-rwxr-xr-x 1 root root 905K Apr 10  2010 bash*
-rwxr-xr-x 3 root root  31K Dec 26  2011 bunzip2*
-rwxr-xr-x 1 root root 505K Nov 15  2010 busybox*
-rwxr-xr-x 3 root root  31K Dec 26  2011 bzcat*
lrwxrwxrwx 1 root root    6 Jun 24  2012 bzcmp -> bzdiff*
...

Sto cercando un modo per colorare la seconda colonna. So usare sed per colorare qualsiasi modello, ma non so come colorare una colonna specifica. Fondamentalmente, ho bisogno di inserire '\033[0;31m'dopo il primo spazio e '\033[0m'davanti al secondo spazio. O forse c'è un modo molto più elegante?


1
brutto:ls --color -l | sed -e $'s/ *[^ ]* /\033[0;31m&\033[0m/'
frostschutz

Risposte:


10

Con GNU grepfornito è stato costruito con il supporto PCRE :

ls -l | GREP_COLORS='mt=1;41;37' grep --color -P '^\S+\s+\K\S+'

Con sed:

on=$(tput setaf 7; tput setab 1; tput bold) off=$(tput sgr0)
ls -l | sed "s/[^[:blank:]]\{1,\}/$on&$off/2"

Si noti che l'utilizzo setafpresuppone che il terminale supporti le sequenze di escape del colore ANSI, quindi è possibile codificarlo anche in modo rigido, il che lo renderebbe anche meno dettagliato. Qui con sintassi ksh93(anche bashe zsh):

on=$'\e[1;47;37m' off=$'\e[m'

Per generalizzare all'ennesima colonna:

n=5

GREP_COLORS='mt=1;41;37' grep --color -P "^(\S+\s+){$(($n-1))}\K\S+"

sed "s/[^[:blank:]]\{1,\}/$on&$off/$n"

Riferimenti


grep -Pè fantastico. Molte grazie.
user1968963,

6

Qualcosa come questo?

awk -v on="$(tput bold)" -v off="$(tput rmso)" '{ $2=on $2 off }; 1'

Modifica: usa i tputsottocomandi appropriati .


L'impostazione $1interromperà l'allineamento della colonna.
Stéphane Chazelas,

2
A rigor di termini, rmsoè di annullare smsocomunque (modalità stand-out), non bold. Su molti terminali ( tput rmsonon si annulla tput bold).
Stéphane Chazelas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.