Remover linhas de código de vários arquivos

3

Estou executando um servidor da Web em uma caixa virtual para testar alguns projetos. E notei que alguns dos arquivos html têm essas linhas indesejadas. Eu quero essas linhas de código de vários arquivos html / htm removidos, então eu fiz assim:

find /Desktop/TEST_REMOVAL3/ -name '*.html' -or -name '*.htm' -or -name '*.php' | sed -i "/<SCRIPT Language=VBScript>/,/ //--></SCRIPT><!-- /d"

Até agora, a primeira parte onde se parece / encontra todos os arquivos html funciona. A parte em que preciso remover as linhas começando de <SCRIPT Language=VBS> para </SCRIPT> usando sed falha: D

Eu tentarei descobrir isso enquanto aguardo suas sugestões e repreendo onde eu errei: D

    
por Dodon 22.04.2014 / 20:18

1 resposta

4

Se você quiser usar a lista de arquivos de find como argumentos para o comando sed (como imput, que é o que sua linha está fazendo), você deve usar o comando xargs :

find dir -name '*.html' | xargs -d \n sed -i "COMMANDS"

Nesse caso, xargs recebe a lista de arquivos, usando nova linha ( \n ) como separador entre os nomes dos arquivos e inicia sed com eles como argumentos.

Ou você usa a opção -exec de find:

find dir -name '*.html' -exec sed -i "COMMANDS" {} +

Nesse caso, find executará o comando entre -exec e + ao substituir {} por (uma lista de) nomes de arquivos. Há também

find dir -name '*.html' -exec sed -i "COMMANDS" {} \;

que faz essencialmente o mesmo, mas inicia um novo sed para cada nome de arquivo.

    
por Adaephon 22.04.2014 / 20:58