Como posso me livrar de todos os blocos de script em arquivos html? [duplicado]

3

Como posso remover todos os blocos de script (incluindo os de várias linhas) dos arquivos html, como:

<script type="text/javascript">
var googletag = googletag || {};
googletag.cmd = googletag.cmd || [];
(function() {
var gads = document.createElement('script');
gads.async = true;
gads.type = 'text/javascript';
var useSSL = 'https:' == document.location.protocol;
gads.src = (useSSL ? 'https:' : 'http:') +
'//www.googletagservices.com/tag/js/gpt.js';
var node = document.getElementsByTagName('script')[0];
node.parentNode.insertBefore(gads, node);
})();
</script>

Eu tentei coisas assim sem sucesso:

sed -i -e 's/<script.*\n.*<\/script>//g' 'path/to/file.html'
    
por Sadi 24.01.2016 / 18:32

2 respostas

3

Com sed , você pode selecionar intervalos e excluí-los:

sed '/<script/,/<\/script>/d' inputfile
    
por 24.01.2016 / 18:38
5

Sed processa a entrada linha por linha. É mais fácil no Perl que pode processar todo o arquivo de uma só vez:

perl -0777 -pe 's=<script>.*?\n.*?</script>==sg'
  • -0777 lê o arquivo inteiro
  • ? após * torna "frugal", ou seja, corresponde à cadeia mais curta possível.
  • /s faz com que . corresponda a uma nova linha que normalmente não corresponde.

Observe que ele pode quebrar se o script contiver </script> em um comentário ou aspas. Seria melhor analisar o HTML.

    
por 24.01.2016 / 18:39