Pergunta

Eu tenho cerca de 150 arquivos e neles eu quero remover este código a seguir:

<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript" SRC="/height.js"></SCRIPT>

O que estou fazendo é:

sed -e 's/<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript" SRC="/height.js"></SCRIPT>/ /' file_names

Este não parece trabalho.

Eu quero remover este script de todos os arquivos de uma só vez. Como posso fazer isso?

Foi útil?

Solução

Você tem que se preocupar com as barras no texto que você está substituindo.

  • Ou: use '\/' para cada barra,
  • Ou:. Fraude e uso '.' para combinar com qualquer caractere no ponto onde o corte deve aparecer

A alternativa explora a improbabilidade de um arquivo contendo o código HTML. Teoricamente, se você não faz como a segunda alternativa, você também deve usar '\.' em cada ponto onde '.' aparece na seqüência que você está olhando.

sed -e 's/<SCRIPT LANGUAGE="JavaScript" TYPE="text.javascript" SRC=".height.js"><.SCRIPT>/ /' file_names

Esta é copiado do seu exemplo e barras são substituídos por pontos. No entanto, o fornecimento de todos os nomes de arquivos na linha de comando como o que simplesmente escrever a saída como a concatenação de todos os arquivos editados para a saída padrão.

Classicamente, para editar arquivos mais ou menos in situ, você escreveria:

tmp=${TMPDIR:-/tmp}/xxx.$$
trap 'rm -f $tmp; exit 1' 0 1 2 3 13 15
for file in ...list...
do
    sed -e '...' $file > $tmp
    mv $tmp $file
done
rm -f $tmp
trap 0

Isto inclui razoavelmente à prova de bala clean-up do temporária - não é perfeito. Esta variante faz o backup do original antes de substituí-lo com a versão editada:

tmp=${TMPDIR:-/tmp}/xxx.$$
trap 'rm -f $tmp; exit 1' 0 1 2 3 13 15
for file in ...list...
do
    sed -e '...' $file > $tmp
    mv $file $file.bak
    mv $tmp $file
done
rm -f $tmp
trap 0

Com GNU sed, você pode usar o '-i' ou a opção '--in-place' para substituir os arquivos; você pode usar '--in-place=.bak' para criar cópias de segurança de cada file em file.bak.

Outras dicas

Você precisa escapar os caracteres especiais com uma barra invertida extra.

Note que a saída será também vão todos para o console. Se você quer 150 arquivos de saída separados, você pode querer olhar para o comando xargs, algo como:

ls -1 | xargs -t -i 'sed -e -i "substituir comentário" {}'

Esteja ciente de que o sed '-i' opção irá editar os arquivos no lugar para obter a sua substituição na primeira à direita e de volta os arquivos up!

Você deve canalizar a saída por exemplo.

sed -e 's/<.*SRC="\/height.js".*>//g' < foo.html > foo1.html

Você não tem que usar o / com o comando s:

sed 's|old|new|' files...

Se você quer fazer inline-substituir, então o primeiro passo é fazer backup de todos os seus arquivos seguida, emitir este comando, substituto 'velha' e 'nova' com cordas de sua escolha:

sed -i .bak 's|old|new|' files...

Porque substituição em linha é muito perigoso, eu não posso enfatizar o suficiente para que você deve fazer backup de todos os seus arquivos antes de executar o comando.

Eu mencionei que você deve fazer backup de todos os seus arquivos ?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top