丫灼
Lv 4
丫灼 asked in 電腦與網際網路程式設計 · 1 decade ago

shell script寫法問題

我有一個 html 的檔案 , 假設是 file.html

此檔案內有許多 function , 例如

function backup_config() {

var name = "/cgi-bin/config.bin";

document.location.href=name;

}

我想要將檔案內所有的 function 刪除

也就是上面這段將不會存在 file.html 裡

請問 shell script 要如何寫 ?

謝謝

Update:

function 內的 {} 可能有多個

最後一個 } 出現的位置不一定是在行首

所以要由程式自行去判斷 @@

4 Answers

Rating
  • 1 decade ago
    Favorite 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

  • kk
    Lv 4
    1 decade ago

    因為不確定您的 function 有多複雜

    先試試看這個吧

    # sed '/function/,/}$/d' file.html > (filename)

    最大的缺點就是結尾的部份

    也就是遇到 "}" 符號後面,若接的是換行符號,

    就會視為 range 的 end

    所以若以您說的情況,有多個 "}" 符號,

    可能就會有誤判的時候!

    (因為有可能在 function 中剛好有個 "}" 符號在行尾)

    這個問題可能要再找些其他的特徵來做處理,

    要稍微再想想了... ^^"

  • 是我
    Lv 5
    1 decade ago

    每個 function ... () { } 的寫法是否各個 function 中有多個 "}" 或只有 function 的結尾才有 "}" ?

    若是各個 function 中有多個 "}" 符號, 是否只有 function 結尾的 "}" 才是在該行的第一字元, function 中其餘的 "}" 皆為內縮 (前有空白字元) ?

  • 1 decade ago

    I don't think shell can do that. Try awk.

Still have questions? Get your answers by asking now.