bash: colorise la deuxième colonne de sortie


8

disons, j'ai la sortie suivante de 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*
...

Je cherche un moyen, comment je pourrais coloriser la deuxième colonne. Je sais comment utiliser sed pour coloriser n'importe quel motif, mais je ne sais pas comment coloriser une colonne spécifique. Fondamentalement, je dois insérer '\033[0;31m'après le premier espace et '\033[0m'devant le deuxième espace. Ou peut-être existe-t-il une manière beaucoup plus élégante?


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

Réponses:


10

Avec GNU grepfourni, il a été construit avec le support PCRE :

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

Avec sed:

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

Notez que l'utilisation setafsuppose que le terminal prend en charge les séquences d'échappement de couleurs ANSI, vous pouvez donc aussi le coder en dur, ce qui le rendrait également moins verbeux. Ici avec ksh93(aussi bashet zsh) la syntaxe:

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

Pour généraliser à la n ième colonne:

n=5

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

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

Références


grep -Pest fantastique. Merci beaucoup.
user1968963

6

Quelque chose comme ça?

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

Modifier: utilisez les tputsous-commandes appropriées .


Le réglage $1rompra cependant l'alignement de la colonne.
Stéphane Chazelas

2
À strictement parler, rmsoc'est d'annuler smso(mode stand-out), non bold. Sur de nombreux terminaux ( tput rmsone pas annuler tput bold).
Stéphane Chazelas
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.