shell - 删除脚本标记

时间:2013-07-17 00:54:43

标签: shell sed cygwin

我是Stack Overflow的新手,刚刚开始使用bash。我正在尝试从多个.htm网页中删除Javascript。我有以下脚本:

find $1 -name "*.htm" > ./files
#for p in $(cat ./files)
#do
   #sed? awk?
#done

在循环中,我需要sedawk我的文件的每一行,以便完全删除所有Javascript。例如,

<script>//SomeJS</script>
<!--foo -->
<!--bar--><script src="cheeseburger.js"> <!--bar -->
<script type ="text/javascript>
/*
* SomeJS
*/
</script> <!-- more foo-->

需要输出:

<!--foo -->
<!--bar-->
<!--bar -->
<!-- more foo-->

以便删除所有JS。我花了好几个小时尝试使用sed但是在模式匹配后被删除会导致整行被删除或者只删除了一些标记。

注意:我正在使用Cygwin。

1 个答案:

答案 0 :(得分:2)

试试这个:

find $1 -name "*.htm" | while IFS= read -r name; do
        tr '\n' '\001' <"$name" | sed \
            -e $'s,<script[^>]*>,\002,g' \
            -e $'s,</script>,\003,g' \
            -e $'s,\002[^\003]*\003,,g' \
            -e $'s,[\002\003],,g' \
            | tr '\001' '\n' >"$name~" && \
            mv "$name~" "$name"
done 

@Ed Morton:他使用古老的HTML并没有关闭标签。