Como localizar e substituir usando texto sed contendo uma estrela *

2

Gostaria de encontrar e substituir texto em muitos arquivos .procmailrc e usar grep e sed .

Eu gostaria de remover a seguinte linha (incluindo a nova quebra de linha no início) dos arquivos .procmailrc :

* !^FROM_MAILER

O conteúdo completo do arquivo que eu quero mudar de:

:0
* !^FROM_MAILER
! [email protected]

para:

:0
! [email protected]

O comando que estou executando é:

grep -lir '\n* !^FROM_MAILER' .procmailrc | xargs sed -i 's/\n* !^FROM_MAILER//g'

Mas não está substituindo o * . Deixa a linha com apenas o * nela. Se eu escapar do * da seguinte maneira, isso também não funciona:

grep -lir '\n\* !^FROM_MAILER' .procmailrc | xargs sed -i 's/\n\* !^FROM_MAILER//g'

Então, eu estou tentando descobrir como fazer o find e replace para remover toda a linha com o * nela.

    
por Laurence Cope 20.11.2015 / 12:24

1 resposta

4

Com sed sozinho:

sed -i '/^* !^FROM_MAILER$/d' file

Para remover toda a linha que contém a string exata * !^FROM_MAILER , sem nada antes e depois dessa string. O comando d exclui a linha.

Editar : se você quiser fazer a substituição em todos os arquivos de forma negativa, use o seguinte:

find /path -type f -exec sed -i '/^* !^FROM_MAILER$/d' {} +
    
por 20.11.2015 / 12:32