从html中删除某些javascript

时间:2011-04-22 16:12:54

标签: linux bash sed

我想从html文件中删除以下javascript。

<script src="text/javascript>
alert('hello');

})();

</script>

<script src="text/javascript>
alert('hello');
} catch(err) {}</script>

通过阅读http://www.cyberciti.biz/faq/sed-howto-remove-lines-paragraphs/我可以使用:

sed '/<script type="text\/javascript"/,/<\/script>/d'

但它会删除所有的javascript。

我的具体要求是javascript,以})(); (new line)</script>结尾,其他以} catch(err) {}</script>结尾

我想使用sed,如果不可能那么任何类似于sed的程序,以便我可以通过脚本运行它。

感谢您抽出宝贵时间。

2 个答案:

答案 0 :(得分:0)

使用awk或您选择的编程语言

awk -vRS="</script>" '/<script/ { if(/}\)\(\);|catch\(err\)/) { gsub(/script.*/,"");}  }1' file

答案 1 :(得分:0)

sed '/text\\/javascript/{:a;N;/<\/script>/!ba;s/.*})();\n\n<\/script>|.*} catch(err) {}<\/script>//}'

它将删除所有以})(); (new line)</script>} catch(err) {}</script>结尾的javascript块。

一点解释:

  • / text / javascript / :该块从标记开始包含text/javascript
  • :a :创建标签
  • N :阅读模式空间的下一行
  • /&lt; \ script&gt; /!ba :如果它不是关闭标记,则分支到标签a
  • s / pattern // :如果满足条件,则删除模式空间