Trending News
shell script寫法問題
我有一個 html 的檔案 , 假設是 file.html
此檔案內有許多 function , 例如
function backup_config() {
var name = "/cgi-bin/config.bin";
document.location.href=name;
}
我想要將檔案內所有的 function 刪除
也就是上面這段將不會存在 file.html 裡
請問 shell script 要如何寫 ?
謝謝
function 內的 {} 可能有多個
最後一個 } 出現的位置不一定是在行首
所以要由程式自行去判斷 @@
4 Answers
- 1 decade agoFavorite Answer
這樣不曉得可不可以滿足你的需求
由遇到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
- kkLv 41 decade ago
因為不確定您的 function 有多複雜
先試試看這個吧
# sed '/function/,/}$/d' file.html > (filename)
最大的缺點就是結尾的部份
也就是遇到 "}" 符號後面,若接的是換行符號,
就會視為 range 的 end
所以若以您說的情況,有多個 "}" 符號,
可能就會有誤判的時候!
(因為有可能在 function 中剛好有個 "}" 符號在行尾)
這個問題可能要再找些其他的特徵來做處理,
要稍微再想想了... ^^"
- 是我Lv 51 decade ago
每個 function ... () { } 的寫法是否各個 function 中有多個 "}" 或只有 function 的結尾才有 "}" ?
若是各個 function 中有多個 "}" 符號, 是否只有 function 結尾的 "}" 才是在該行的第一字元, function 中其餘的 "}" 皆為內縮 (前有空白字元) ?