Tudo:
Como usamos sed para filtrar linhas por dois critérios?
aptitude -v show '?name(grep)' | egrep --color=always "^|grep" | sed 's/^\(Package: .*\)$/\x1b[33;1m\1\x1b[0m/'
Acima, o que estou tentando fazer é primeiro usar grep para colorir todas as correspondências encontradas da minha string de pesquisa ('grep' neste exemplo) e, em seguida, colorir todas as linhas de título 'Pacote: ...' na saída do aptitude de amarelo . No entanto, se qualquer linha 'Pacote: ...' tiver anteriormente a cor vermelha adicionada pelo comando egrep ..., o que acontece é que a linha começa em amarelo, converte em vermelho para a string 'grep' encontrada e depois reverte para a cor normal quando '\e[0m' é encontrado (como eu esperava).
Então, parece-me que o que tenho que fazer é encontrar quaisquer linhas 'Pacote: ...' e então, apenas nessas linhas, remover os possíveis códigos de cores antes de colorir toda a linha de amarelo.
sed "s,\x1B\[[0-9;]*[a-zA-Z],,g"
... retirará os códigos, mas preciso executá-los apenas nas linhas que começam com 'Pacote: ....'. Qual é o feitiço? Ou pode haver uma maneira mais elegante de fazer isso?
man sed
vai te dizer:Então você pode fazer: