Replace text in file with user input containing space, using sed
My script:
#!/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
File in which i'm doing replacemants (vhost.tpl):
<VirtualHost 0.0.0.0:80>
ServerName {server_name}
ServerAlias {server_alias}
DocumentRoot /var/www/{server_name}
</VirtualHost>
It works fine when I'm creating vhost with one 开发者_StackOverflow社区server alias
./vhost.sh domain.com www.domain.com
But when I want to have more aliases
./vhost.sh domain.com "www.domain.com m.domain.com"
script fails with message like
sed: -e expression #1, char 31: unterminated `s' command
Do I have to escape space character in some way to use it in replacement string?
Just put a pair of double quotes around the $alias_replace
reference:
sed -i.bkp "$alias_replace" host.conf
It should do the trick. You just need to do it in the second sed call but I would strongly suggest you tho quote both variables.
sed -i -e "s,{server_name},$1,g" -e "s,{server_alias},$2,g" host.conf
No need for two commands. Every need to use the double quotes.
You could avoid the -e
options if you wanted to; I find them clearer than the alternative.
精彩评论