我正在寫我的函數來將文件中的有效選項替換爲我的設置。 的1.txt的是這樣的:sed使用字符串包含空間的參數
PasswordAuthentication yes
PermitRootLogin yes
My功能將處理文件,然後輸出等:
#PasswordAuthentication yes
PasswordAuthentication no
#PermitRootLogin yes
PermitRootLogin no
桑達參數是從由函數,sed_chain(產生的字符串),如下面: 問題是,如果有$ {模式}和$ {選項}之間的空間,然後我得到了錯誤: 的sed:-e表達式#1,焦炭46:未結束的'S'命令
如果有之間沒有空格他們,功能起作用,但這不是我想要的。
#!/bin/bash
A="PasswordAuthentication no"
B="PermitRootLogin no"
F="/tmp/1.txt"
sed_chain() {
args=("[email protected]")
file=${@:(-1)}
pattern_params=""
for i in $(seq 0 $(($#-2)))
do
pattern=$(echo ${args[$i]}|cut -d" " -f1)
option=$(echo ${args[$i]}|cut -d" " -f2)
echo $pattern
echo $option
pattern_params="-e s/^[^#]*${pattern}.*$/#&\n${pattern} ${option}/g $pattern_params" # failed
#pattern_params='-e s/^[^#]*'${pattern}'.*$/#&'"\n${pattern}${option}"'/g '${pattern_params} # passed
echo "*** $pattern_params ***"
done
sed $pattern_params $file
}
sed_chain "$A" "$B" "$F"
'$ pattern_params'回聲是什麼? – 2013-03-27 05:08:51
它只是用於調試$ pattern_params的內容 – timchen 2013-03-27 05:12:25
是的,你到達那裏? – 2013-03-27 05:12:41