字串取代

一開始的目的是為了取代檔案$FILEPATH中的$target字串為$replace_str,如以下script:

cmd="sed -i 's/$target/$replace_str/g' $FILEPATH"
eval $cmd
但因為$replace_str是一個路徑字串,會包含/(Slash),對sed來說是特殊字元,我們必須在/(Slash)前加一個\(Backslash)。所以我要做的事情就是取代$replace_str中的/為\/。

Method 1 - awk

基本上就是透過gsub這個函式:

new_replace_str=`echo $replace_str | awk '{gsub("/","\\\/",$1);print $1}'`

Method 2 - variable replacement

變數內容取代有兩種寫法:

${變數名稱//舊字串/新字串} 取代所有符合字串
${變數名稱/舊字串/新字串}  僅取代第一個符合字串
對於處理路徑的問題可以這樣寫:
new_replace_str=${replace_str//\//\\/};

友藏內心獨白: ShellScript的特殊符號實在是很機車高深!

sed也可以做到取代檔案內某個字串的效果,可以參考link