1

我是 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。

4

1 回答 1

2

Try this:

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: he’s using ancient HTML and doesn’t close the tag.

于 2013-07-24T15:45:48.470 回答