sed: pesquisa na pesquisa

1

Todos:

Como usamos o sed para filtrar as linhas por dois critérios?

aptitude -v show '?name(grep)' | egrep --color=always "^|grep" | sed 's/^\(Package: .*\)$/\x1b[33;1m\x1b[0m/'

Acima, o que estou tentando fazer é usar o grep pela primeira vez para colorir as correspondências encontradas da minha string de pesquisa ('grep' neste exemplo) e depois colorir todas as linhas de título 'Package: ...' Saída do aptitude amarela. No entanto, se qualquer linha 'Package: ...' tiver sido previamente adicionada à cor vermelha pelo comando egrep ..., o que acontece é que a linha começa amarela, é convertida em vermelha para a string 'grep' encontrada e depois é revertida para a cor normal quando '\ e [0m' for encontrado (como eu esperaria).

Então, parece-me que o que eu tenho que fazer é encontrar qualquer linha 'Package: ...' e então, apenas nessas linhas, remover possíveis códigos de cores antes de colorir toda a linha amarela.

sed "s,\x1B\[[0-9;]*[a-zA-Z],,g"

... irá remover os códigos, mas eu preciso apenas executar isso nas linhas começando com 'Package: ....'. Qual é o feitiço? Ou pode haver uma maneira mais elegante de fazer isso?

    
por Ray Andrews 04.02.2018 / 23:14

1 resposta

3

man sed dirá:

Sed commands can be given with ... one address, in which case the
command will only be executed for input lines which match that address;
...
/regexp/
          Match lines matching the regular expression regexp.

Então você pode fazer:

sed '/Package/ s/replace/stuff/'
    
por 04.02.2018 / 23:57

Tags