2013-08-22 3 views
0

Я хочу заменить текст из входного файла. Входной файл содержит следующий текст ввода:Ubuntu SED: Замена регулярными выражениями

... 
[ 
%% Riak Client APIs config 
{riak_api, [ 
     %% pb_backlog is the maximum length to which the queue of pending 
     %% connections may grow. If set, it must be an integer >= 0. 
     %% By default the value is 5. If you anticipate a huge number of 
     %% connections being initialised *simultaneously*, set this number 
     %% higher. 
     %% {pb_backlog, 64}, 

     %% pb is a list of IP addresses and TCP ports that the Riak 
     %% Protocol Buffers interface will bind. 
     {pb, [ {"192.168.75.999", 8087 } ]} 
     ]}, 

%% Riak Core config 
... 

Я попытался ввести следующую SED регулярного выражения:

sed -i -e "s/\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}\", 8087/$my_ip\", 8087" /path/to/file 

В результате я хочу иметь старый IP-адрес 192.168.58.999 заменен с сервером фактический IP-адрес. Переменная my_ip подается с IP-значением сервера с предыдущего шага. SED выполняет выражение регулярного выражения и возвращается без ошибок, но также без каких-либо изменений в файле.

Я хотел бы получить любую помощь по этой проблеме. (Я использую Ubuntu 12.04.2, 64 бит)

+4

Возможно, было бы легче, если бы мы могли видеть входные данные. Всего несколько строк, если оно длинное. –

+1

Ну, вам не хватает обратной косой черты перед первым «d» ... это поможет? – FrankieTheKneeMan

+0

Если вы хотите «заменить текст из входного файла», тогда покажите нам «текст из входного файла», чтобы мы могли вам помочь. –

ответ

0

Ok,

мне удалось решить эту проблему. Со следующим фрагментом кода SED это сработало для меня.

sed -ire "s/[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\"\, 8087/$my_ip \"\, 8087/g" 
1

это помогает?

kent$ my_ip="newIpAddr" 

kent$ sed "s/\".*\"/\"$my_ip\"/" <<< '{pb, [ {"192.168.58.999", 8087 } ]}' 
{pb, [ {"newIpAddr", 8087 } ]} 
1

Вы упускаете обратную косую черту для первого \d, но это спорный вопрос, так как СЭД не понимает \d в любом случае.

sed -ire "s/[0-9]{1,3}(\.[0-9]{1,3}){3}\", 8087/$my_ip\", 8087/" /path/to/file 

Изменения:

  • Добавлен -r флаг для включения расширенных регулярных выражений. Необходимо для фигурных скобок.
  • Использовать [0-9] вместо \d.
  • Escape . с \. поэтому он соответствует периодам, а не любой символ.
  • \.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} укороченный до (\.[0-9]{1,3}){3}.
+0

Привет, Джон, спасибо за ответ. Так или иначе, это не помогло. Я что-то пропустил? – Bugra

Смежные вопросы