Editar multiplos arquivos

  • find tests/ -mindepth 1|while read a; do sed -i 's;incolumepy;incolume.py;g' $a; done

  • ls *.cfg | xargs sed -i"23i#####################################################"
    
  • Para um listanome.txt conforme abaixo...

    $ cat listanome.txt 
    ze
    jao
    juca
    

    ...o seguinte sed transforma em um script de exclusão para cada nome da lista:

    $ sed 's/^/\//; s/$/\/d/' listanome.txt
    /ze/d
    /jao/d
    /juca/d
    

    Assim, passe tal comando sed para a flag -f de um novo sed, que executará tal script em todos os arquivos a serem afetados, supostamente contidos no diretório caminho:

    $ sed --in-place=.bak -f <(sed 's/^/\//; s/$/\/d/' listanome.txt) /caminho/*
    

    Isso deletará todas as linhas de todos os arquivos do diretório caminho que contêm os nomes de listanome.txt, efetuando cópias de segurança com a extensão ".bak" para cada arquivo alterado.

    Caso seu requisito mude, altere o primeiro sed de acordo com o que deseja, por exemplo:

    • Para deletar todas as linhas idênticas às do índice:

      $ sed 's/^/\/^/; s/$/$\/d/' listanome.txt
      /^ze$/d
      /^jao$/d
      /^juca$/d
      
    • Para substituir o conteúdo da linha pela string "REMOVER":

      $ sed 's/^/\/^\.\*/; s/$/\.\*$\/REMOVER\/g/' listanome.txt
      /^.*ze.*$/REMOVER/g
      /^.*jao.*$/REMOVER/g
      /^.*juca.*$/REMOVER/g

Comentários