Como fazer pesquisa de múltiplas linhas e substituir texto (excluir) recursivamente

4

Eu quero ir recursivamente através de um diretório e procurar por conteúdo específico em todos os arquivos. O conteúdo deve então ser substituído se encontrado. Com uma única linha eu faria algo assim:

find . -type f -exec sed -i -e 's@code2replace@@g' {} \;

Por vezes funcionou e por vezes não (espaço insuficiente no disco rígido ...). Agora eu precisaria de algo para uma substituição múltipla. O arquivo original deve ser sobrescrito e o padrão de múltiplas linhas pode ser bastante longo. Então talvez armazenar em um arquivo externo seria mais fácil eu acho.

O código que deve ser substituído é semelhante ao seguinte:

#c3284d#
echo(gzinflate(base64_decode("sylOLsos....")));
#/c3284d#

Além disso, quais personagens eu tenho que escapar?

    
por testing 09.08.2012 / 11:32

1 resposta

4

Sed pode fazer muitas coisas além de simples busca e substituição, e isso inclui suporte multilinha.

Aqui está uma postagem no blog sobre como alguém fez isso (ele escreveu um script sedml para "multiline sed": link

A idéia básica é copiar todo o arquivo para o "buffer de espera" do sed, executar o regex nele e depois escrever o arquivo alterado. No entanto, essa abordagem pode ser um pouco lenta se os arquivos forem grandes, já que você está carregando um arquivo inteiro por vez na memória.

    
por 09.08.2012 / 12:33