2011-08-09 115 views
0

我的腳本:替換文本,用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 

文件,在其中我做replacemants(vhost.tpl):

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

它正常工作時我創建一個服務器別名

./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 

消息未能我必須逃離空格字符以某種方式在替換字符串中使用它?

回答

1

只要把一對雙引號圍繞$alias_replace參考:

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

它應該做的伎倆。你只需要在第二次sed調用中做到這一點,但我強烈建議你引用這兩個變量。

+0

我會發誓,我已經嘗試過了......但它工作,謝謝! –

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

不需要兩個命令。每個需要使用雙引號。

如果您願意,您可以避開-e選項;我發現它們比替代品更清晰。