SED - Localizar e substituir por caracteres especiais (#,%)

0

Estou ciente de que esta é uma pergunta muito simples, mas estou com dificuldades para encontrar uma solução para isso.

Eu preciso encontrar e substituir automaticamente no arquivo /etc/aliases a seguinte seção:

# Person who should get root's mail
#root:   marc

E precisa ser algo parecido com:

# Person who should get root's mail
root:  [email protected]

E eu não consegui encontrar uma solução. Vocês podem entrar com algumas sugestões? Não precisa ser sed .

    
por hoisu 26.08.2015 / 09:16

1 resposta

4

Em um sistema GNU, você pode usar isto:

sed -i '/^#[[:blank:]]Person/{n;s/#root:[[:blank:]]\+marc/root:\[email protected]/;}' file

Ele procura por uma linha que comece com # Person . Em seguida, alterna para a próxima linha e substitui #root:<blanks>marc por root:<tab> ... . O -i flag edita o arquivo no local.

-i , \+ e \t são extensões do GNU. O equivalente padrão de \+ é o wordier \{1,\} . Para editar o arquivo no lugar portável, você precisaria recorrer a um arquivo temporário. O equivalente padrão de \t é inserir um caractere de tabulação literalmente.

    
por 26.08.2015 / 09:22