使用sed将文件中的文本替换为包含空格的用户输入

时间:2011-08-09 23:01:08

标签: 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):

<VirtualHost 0.0.0.0:80>
    ServerName {server_name}
    ServerAlias {server_alias}
    DocumentRoot /var/www/{server_name}
</VirtualHost>

当我使用一个服务器别名

创建vhost时,它工作正常
./vhost.sh domain.com www.domain.com

但是当我想要更多别名时

./vhost.sh domain.com "www.domain.com m.domain.com"

脚本失败并显示

之类的消息
sed: -e expression #1, char 31: unterminated `s' command

我是否必须以某种方式转义空格字符才能在替换字符串中使用它?

2 个答案:

答案 0 :(得分:1)

只需在$alias_replace引用旁边放一对双引号:

sed -i.bkp "$alias_replace" host.conf

它应该做的伎俩。你只需要在第二个sed调用中执行它,但我强烈建议你引用两个变量。

答案 1 :(得分:1)

sed -i -e "s,{server_name},$1,g" -e "s,{server_alias},$2,g" host.conf

无需两个命令。每个需要使用双引号。

如果您愿意,可以避免使用-e选项;我发现它们比替代方案更清晰。