Saída de cauda de colorização com sed

4

Como devo proceder para colorir a saída de tail com sed ?

echo "'tput setaf 1'foo'tput op'" funciona como esperado

echo "foo" | sed -e 's/(foo)/'tput setaf 1'%code%'tput op'/g' no entanto, não.

O que estou perdendo aqui?

    
por Demian Brecht 23.11.2012 / 19:48

2 respostas

5

Os backticks '' no comando echo geram um processo e sua saída é substituída na linha de comando echo. Você pode ver isso com, por exemplo.

echo "'tput setaf 1'" | hexdump -C
00000000  1b 5b 33 31 6d 0a                       |.[31m.|

Isso funciona porque o conteúdo do "..." é expandido antes de ser passado para o eco.

O comando sed que você está usando envolve tudo em ' , de modo que é passado para o sed sem expansão e o sed vê tudo como texto literal.

Você pode consertar isso colocando "" em volta do seu comando sed

echo "foo" | sed -e "s/\(foo\)/'tput setaf 1''tput op'/g"

Você também teve um erro no seu comando sed. Os ( e ) precisam ter o escape \( e \) para denotar o padrão lembrado. Eu também nunca usei Eu sempre usei %code% como o primeiro padrão lembrado.

    
por 23.11.2012 / 21:12
5

Precisa ser sed ?

echo "foo bar baz" | grep --color=auto "bar"

Os itens acima destacarão bar em vermelho por padrão. A página man diz que você pode escolher a cor a ser usada com a variável de ambiente GREP_COLORS .

Para imprimir todas as linhas e destacar apenas bar :

echo "foo bar baz" | grep -E --color=auto "^|bar"
    
por 23.11.2012 / 20:09