1

私は Stack Overflow が初めてで、bash を使い始めたばかりです。.htmいくつかのWeb ページから Javascript を削除しようとしています。次のスクリプトがあります。

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

ループ内で、すべての Javascript が完全に削除されるように、ファイルの各行を実行する必要がありsedますawk。たとえば、

<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

これを試して:

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 を使用しており、タグを閉じていません。

于 2013-07-24T15:45:48.470 に答える