bash: colorize a segunda coluna de saída

7

digamos que eu tenha a seguinte saída 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*
...

Estou procurando uma maneira de colorir a segunda coluna. Eu sei como usar o sed para colorir qualquer padrão, mas não sei como colorir uma coluna específica. Basicamente, eu preciso inserir '3[0;31m' após o primeiro espaço e '3[0m' na frente do segundo espaço. Ou talvez haja uma maneira muito mais elegante?

    
por user1968963 26.05.2013 / 19:15

2 respostas

9

Com o GNU grep , desde que tenha sido criado com o suporte do PCRE :

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

com sed :

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

Note que usar setaf assume que o terminal suporta seqüências de escape de cor ANSI, então você também pode codificá-lo, o que tornaria menos detalhado também. Aqui com a sintaxe ksh93 (também bash e zsh ):

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

Para generalizar para a coluna th :

n=5

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

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

Referências

por 26.05.2013 / 19:46
5

Algo parecido com isto?

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

Editar: use os subcomandos tput adequados.

    
por 26.05.2013 / 19:22