shell script寫法問題

2009-04-08 7:38 pm
我有一個 html 的檔案 , 假設是 file.html
此檔案內有許多 function , 例如

function backup_config() {
var name = "/cgi-bin/config.bin";
document.location.href=name;
}

我想要將檔案內所有的 function 刪除
也就是上面這段將不會存在 file.html 裡
請問 shell script 要如何寫 ?
謝謝
更新1:

function 內的 {} 可能有多個 最後一個 } 出現的位置不一定是在行首 所以要由程式自行去判斷 @@

回答 (4)

2009-04-14 2:53 am
✔ 最佳答案
這樣不曉得可不可以滿足你的需求
由遇到function開始計算{和}的個數
當{和}的個數相等則代表是function結束

#!/bin/sh
startflag=0;
lefbknum=0;
rightbknum=0;
IFSbk=$IFS
IFS=$'\n'
while read Line
do
 delheadspace="${Line##[[:space:]]}"
  if [ "${delheadspace:0:8}" = "function" ]; then
   startflag=1;
   lefbknum=`echo -n $Line | sed -e 's/[^\{]//g' | wc -c`
   rightbknum=`echo -n $Line | sed -e 's/[^\}]//g' | wc -c`
   continue
  fi
  if [ $startflag -eq 1 ]; then
   (( lefbknum+=`echo -n $Line | sed -e 's/[^\{]//g' | wc -c` ))
   (( rightbknum+=`echo -n $Line | sed -e 's/[^\}]//g' | wc -c` ))
   [ $lefbknum -eq $rightbknum ] && startflag=0;
   continue
  fi
  [ $startflag -eq 0 ] && echo $Line
done < $1
IFS=$IFSbk
2009-04-11 3:52 pm
因為不確定您的 function 有多複雜
先試試看這個吧
# sed '/function/,/}$/d' file.html > (filename)

最大的缺點就是結尾的部份
也就是遇到 "}" 符號後面,若接的是換行符號,
就會視為 range 的 end

所以若以您說的情況,有多個 "}" 符號,
可能就會有誤判的時候!
(因為有可能在 function 中剛好有個 "}" 符號在行尾)

這個問題可能要再找些其他的特徵來做處理,
要稍微再想想了... ^^"
2009-04-10 9:55 pm
每個 function ... () { } 的寫法是否各個 function 中有多個 "}" 或只有 function 的結尾才有 "}" ?
若是各個 function 中有多個 "}" 符號, 是否只有 function 結尾的 "}" 才是在該行的第一字元, function 中其餘的 "}" 皆為內縮 (前有空白字元) ?
2009-04-09 6:59 am
I don't think shell can do that. Try awk.


收錄日期: 2021-04-30 12:53:07
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20090408000010KK03033

檢視 Wayback Machine 備份