Pesquisar e remover texto em arquivos de um arquivo de origem

4

Eu quero procurar e remover um texto de bloco de vários arquivos.

O bloco de texto a ser correspondido está no arquivo, digamos /home/user/myblock.txt Eu quero analisar o diretório /home/user/rep e remover o conteúdo de mybloc.txt de todos os arquivos no diretório.

    
por nicosomb 30.05.2011 / 14:51

2 respostas

4

Se o bloco de texto a ser removido ocupar várias linhas, e se cada arquivo individual couber confortavelmente na RAM, a abordagem mais fácil é carregar cada arquivo inteiramente na RAM e executar uma substituição global de string. O Perl torna isso fácil, com -i -p para modificar os arquivos no local por registro e -0777 para não definir nenhum separador de registro (o separador de registro padrão é uma nova linha).

perl -0777 -i -pe '
    BEGIN {
        open BLOCK, "<", "/home/user/myblock.txt";
        $block = <BLOCK>;
        die unless length($block);
        close BLOCK;
    }
    s/\Q$block//g
' /home/user/rep/*
    
por 30.05.2011 / 23:47
0

Você pode tentar isso:

    var='cat /home/user/myblock.txt';
    sed -e s/"$var"//g /home/user/rep/somefile;

É claro que isso apenas imprimirá o arquivo inteiro sem o seu bloco de texto, mas você pode salvá-lo facilmente com o redirecionamento de saída.

Se você quiser editar o arquivo "in place", use o argumento -i para sed, mas tenha cuidado. Você pode perder todos os seus dados. É uma idéia melhor salvar em algum arquivo temporário e renomeá-lo.

Isso não está funcionando se myblock.txt tiver várias linhas.

    
por 30.05.2011 / 15:25