如何从 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>
我尝试了这样的事情但没有成功:
sed -i -e 's/<script.*\n.*<\/script>//g' 'path/to/file.html'
答案1
sed 逐行处理输入。在 Perl 中更容易一次处理整个文件:
perl -0777 -pe 's=<script>.*?\n.*?</script>==sg'
-0777
读取整个文件?
after*
使其“节俭”,即它匹配最短的可能字符串。/s
匹配.
通常不匹配的换行符。
请注意,如果脚本包含</script>
注释或引号,它可能会中断。解析 HTML 会更好。
答案2
您sed
可以选择范围并删除它们:
sed '/<script/,/<\/script>/d' inputfile