Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用sed将文件中的文本替换为包含空格的用户输入_Linux_Replace_Sed - Fatal编程技术网

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