A maneira mais simples de fazer isso seria:
cat test.txt | perl -pe "s/^(#.*)/\e[0;32m3[0m/g || s/(aaa|bbb)/\e[1;31m3[0m/g"
Isso usa o lógico ou operador ||
para informar ao perl para executar somente o segundo s///
se o primeiro falhar. ou seja, semelhante a um if (/#/) ... else if (/aaa|bbb/) ...
Você pode adicionar mais || s///
no final do script, se precisar, mas se precisar pesquisar e colorir muitas outras correspondências, fazer isso como uma linha de ação ficaria muito distante muito complicado. Nesse caso, reescreva tudo como um script #! /usr/bin/perl -p
independente, talvez com um s///g ||
por linha e um ponto e vírgula final em vez de ||
na última linha.
Por exemplo:
#! /usr/bin/perl -p
s/^(#.*)/\e[0;32m3[0m/g ||
s/(aaa|bbb)/\e[1;31m3[0m/g ||
s/(ccc)/\e[1;34m3[0m/g ;
Observe que fazer isso significa que apenas uma partida será encontrada em qualquer linha e a primeira partida vence. Portanto, no meu exemplo de script mais longo acima, se 'aaa' ou 'bbb' forem encontrados em uma linha, eles serão coloridos, mas se 'ccc' estiver na linha mesmo , não será.
Finalmente, parece que você está reinventando a roda. Existem várias ferramentas que já existem para colorir o texto. A ferramenta destaque , por exemplo. É usado principalmente para destacar a sintaxe do código-fonte, mas pode ser usado para colorir qualquer tipo de texto.