如何摆脱 html 文件中的所有脚本块?

Sad*_*adi 3 sed shell-script

如何从 html 文件中删除所有脚本块(包括多行),例如:

<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>
Run Code Online (Sandbox Code Playgroud)

我尝试过这样的事情但没有成功:

sed -i -e 's/<script.*\n.*<\/script>//g' 'path/to/file.html'
Run Code Online (Sandbox Code Playgroud)

cho*_*oba 6

sed 逐行处理输入。在 Perl 中可以更轻松地一次处理整个文件:

perl -0777 -pe 's=<script>.*?\n.*?</script>==sg'
Run Code Online (Sandbox Code Playgroud)
  • -0777 读取整个文件
  • ?after*使它“节俭”,即它匹配最短的字符串。
  • /s使.匹配一个通常不会的换行符。

请注意,如果脚本包含</script>在注释或引号中,它可能会中断。解析 HTML 会更好。


pfn*_*sel 5

sed可以选择范围并删除它们:

sed '/<script/,/<\/script>/d' inputfile
Run Code Online (Sandbox Code Playgroud)