Использование Sed с регулярными выражениями для замены подстроки - PullRequest
0 голосов
/ 14 декабря 2011

Я использую Ubuntu Natty.

Я пытаюсь использовать sed для замены строки с помощью командной строки.

Часть текстового файла (app.config), которую я пытаюсь заменить, выглядит следующим образом:

%% http is a list of IP addresses and TCP ports that the Riak
%% HTTP interface will bind.
{http, [ {"127.0.0.1", 8098 } ]},

И я пытаюсь заменить IP-адрес на что-то другое. Вот мой код:

 ip="192.168.10.12"    
 sed -i "s/\(\{http,[\t ]*\[[\t ]*\{\)\"[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\"/\1\"$ip\"/" /root/sandbox/app.config

Однако я получаю сообщение об ошибке sed: -e expression #1, char 103: Invalid preceding regular expression.

Что я делаю не так?

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 14 декабря 2011

Добавьте флаг регулярного выражения, отредактируйте свое регулярное выражение, удалив экранирование из ключевых слов, таких как ( или {. Кажется, работает сейчас

ip="192.168.10.12"
sed -i -r "s/(\{http,[\t ]*\[[\t ]*\{)\"[1-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\"/\1\"$ip\"/" /root/sandbox/app.config
1 голос
/ 14 декабря 2011

Это может сработать для вас:

sed  "s/\({http,[\t ]*\[[\t ]*{\)\"[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\"/\1\"$ip\"/"

Вам не нужно избегать {, когда они буквальны.

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