2016-08-08 3 views
0

Я пытаюсь найти и заменить строку в файле на терминале Mac с помощью sed. Я могу найти и заменить простую строку:Поиск и замена Sed в переменной string

sed -i.bak 's/HOSTS/BOASTS/g' file.txt 

Но я пытаюсь его на что-то более сложным, в основном строка, я хочу, чтобы заменить выглядит что-то вроде «HOSTS:" 123.123.123.123, 12345 «'- с 123.123.123.123, являющимся переменным IP, поэтому я не могу точно его искать, поэтому я пытаюсь использовать регулярные выражения, в основном«. ». чтобы указать, что я не знаю, каким будет IP-адрес.

Я попытался следующие без везения:

sed -i.bak 's/HOSTS:"., 00000"/HOSTS:"999.999.999.999, 00000"/g' file.txt 

ответ

1

Вы можете попробовать следующее:

echo "HOSTS:\"123.123.123.123, 12345\"" | sed -e 's/[0-9][0-9][0-9]\.[0-9][0-9][0-9]\.[0-9][0-9][0-9]\.[0-9][0-9][0-9]/999.999.999.999/g'. 

каждый [0-9] будет искать цифры, и каждый \. является фактическим символом, а не символ «соответствовать символу» в sed. Это предполагает, что IP-адреса всегда будут иметь эту структуру. Если вы имеете дело с xxx.xxx.xxx.xxx:xxxx, вам придется соответствующим образом отредактировать.

+0

Я предлагаю более разрешающее регулярное выражение: '[0-9] \ + \. [0-9] \ + \. [0-9] \ + \. [0-9] \ + /' где ' \ + 'сигналы 1 или более предыдущего символа. Это будет работать для IP-адресов, таких как 4.2.2.2 (действительный IP-адрес). – sage

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