Linux 使用sed将文件中的文本替换为包含空格的用户输入
我的剧本:Linux 使用sed将文件中的文本替换为包含空格的用户输入,linux,replace,sed,Linux,Replace,Sed,我的剧本: #!/bin/sh cp -f host.tpl host.conf mkdir -p /var/www/$1 server_replace="s,{server_name},$1,g" sed -i $server_replace host.conf alias_replace="s,{server_alias},$2,g" sed -i $alias_replace host.conf 我在其中执行替换的文件(vhost.tpl): 但是当我想要更多的别名时 ./vhos
#!/bin/sh
cp -f host.tpl host.conf
mkdir -p /var/www/$1
server_replace="s,{server_name},$1,g"
sed -i $server_replace host.conf
alias_replace="s,{server_alias},$2,g"
sed -i $alias_replace host.conf
我在其中执行替换的文件(vhost.tpl):
但是当我想要更多的别名时
./vhost.sh domain.com "www.domain.com m.domain.com"
脚本失败,消息如下
sed: -e expression #1, char 31: unterminated `s' command
我是否必须以某种方式转义空格字符才能在替换字符串中使用它?只需在
$alias\u replace
引用周围加上一对双引号:
sed -i.bkp "$alias_replace" host.conf
它应该会起作用。您只需要在第二次sed调用中执行此操作,但我强烈建议您引用这两个变量
sed -i -e "s,{server_name},$1,g" -e "s,{server_alias},$2,g" host.conf
不需要两个命令。每个人都需要使用双引号
如果愿意,您可以避免使用-e
选项;我发现它们比替代品更清晰
sed -i.bkp "$alias_replace" host.conf
sed -i -e "s,{server_name},$1,g" -e "s,{server_alias},$2,g" host.conf