Заменить текст в файле пользовательским вводом, содержащим пробел, используя sed - PullRequest
0 голосов
/ 10 августа 2011

Мой скрипт:

#!/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 ]

1 голос
/ 10 августа 2011
sed -i -e "s,{server_name},$1,g" -e "s,{server_alias},$2,g" host.conf

Нет необходимости в двух командах.Каждый должен использовать двойные кавычки.

Вы можете избежать опций -e, если хотите;Я нахожу их более ясными, чем альтернатива.

1 голос
/ 10 августа 2011

Просто поместите пару двойных кавычек вокруг ссылки $alias_replace:

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

Это должно сработать.Вам просто нужно сделать это во втором вызове sed, но я настоятельно рекомендую вам указать обе переменные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...