我正在编写函数以将文件中的有效选项替换为我的设置。1.txt 是这样的:
PasswordAuthentication yes
PermitRootLogin yes
我的函数将处理文件,然后输出如下:
#PasswordAuthentication yes
PasswordAuthentication no
#PermitRootLogin yes
PermitRootLogin no
sed 参数来自函数 sed_chain() 生成的字符串,如下所示: 问题是如果 ${pattern} 和 ${option} 之间有空格,则出现错误:sed: -e expression #1, char 46: 未终止的 `s' 命令
如果它们之间没有空间,则该功能有效,但这不是我想要的。
#!/bin/bash
A="PasswordAuthentication no"
B="PermitRootLogin no"
F="/tmp/1.txt"
sed_chain() {
args=("$@")
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"