Em primeiro lugar, você pode usar quase exatamente a mesma expressão regular e sintaxe que usou com sed
. Basta alterar &
para $&
para Perl:
echo "WARN ERROR foo" |
perl -pe 's#WARN#\x1b[33m$&#; s#ERROR#\x1b[31m$&#; s#foo#\x1b[32m$&#'
Ou, usando sua abordagem original do Perl, basta remover o .*
de cada lado do padrão que você deseja corresponder:
tail -f logfile.log | perl -pe 's/foo/\e[1;41m$&\e[0m/g'
Para uma abordagem mais versátil, você pode usar o pequeno script que eu postei em minha resposta aqui . Com ele, você pode colorir até 10 padrões com uma cor diferente para cada um. Por exemplo, para colorir as palavras ERROR
, WARNING
e foo
, em uma cor diferente, insensível a maiúsculas e minúsculas:
tail -f logfile.log | color.pl -il "error,warning,foo"