2013-07-17 74 views
1

我是新來的堆棧溢出,剛開始使用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。

+0

您發佈的期望輸出結果不僅僅是刪除JS,因爲它還會刪除''之前的換行符,將第二個「」之前的空格轉換爲換行符,並在「 ! - 更多foo ..>'也是。這真的是需要的嗎? –

+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莫頓:他用古老的HTML和不關閉標籤。