У меня есть файл, который я пытаюсь изменить с помощью Perl с терминала в Ubuntu Linux (Natty).Странное поведение с командной строкой perl
Имя файла vm.args и первые две строки следующим образом:
## Name of the riak node
-name [email protected]
Я пытаюсь использовать Perl для обновления адреса IP. Ниже мой код:
riak_ip=`ifconfig eth1 | grep "inet addr" | cut -d ":" -f2 | cut -d " " -f1`
perl -0777 -i -pe "s/(\-name[\t ]*riak\@)[^\n]+/\1$riak_ip/g" vm.args
Предположим, что адрес ip, который я получаю, является 10.181.106.32. Команда perl дает мне результат, который я не могу понять. В результате первые две строки в моем файле после того, как я запускаю выше в терминале стать:
## Name of the riak node
H.181.106.32
Какая это буква H и часть адреса IP.
Я не могу понять, что я делаю неправильно, и буду признателен за помощь.
Заранее благодарен.
Это Unix, не так ли? Вы получите лучшие результаты, если вы ставите аргумент '-e' perl' в одинарные кавычки вместо двойных кавычек. – mob
@mob - за исключением того, что он хочет, чтобы env var '$ riak_ip' расширялся в встроенный скрипт perl. –
'\ 1' - это шаблон регулярного выражения, соответствующий строке, захваченной первым захватом. Нет смысла использовать его в замещающем выражении. Это также является причиной ваших проблем. Избавиться от этого! Вы должны использовать '$ 1'. – ikegami