Как sed или perl заменить текст точками и косыми чертами без кавычек? - PullRequest
0 голосов
/ 24 сентября 2019

Я использовал следующую команду и перепробовал множество разновидностей (включая sed):

perl -pi -e s/multi on/172\.31\.1\.1\/32 dev eth0\\ndefault via 172\.31\.1\.1 dev eth0/g /etc/sysconfig/network-scripts/route-eth0

ошибка: «Шаблон замены не завершен в строке -e 1. Когда я пытаюсь использовать sed вместо этого, он жалуется на неопределенность»s "команда

Цель состоит в том, чтобы заменить:

multi on

на:

172.31.1.1/32 dev eth0
default via 172.31.1.1 dev eth0

(без использования в команде символов | > " ' $)

1 Ответ

3 голосов
/ 24 сентября 2019

Если вы не хотите заключать команду в кавычки (почему нет?), Вам нужно экранировать все пробелы.

perl -pi -e s/multi\ on/172.31.1.1\\/32\ dev\ eth0\\ndefault\ via\ 172.31.1.1\ dev\ eth0/ /etc/sysconfig/network-scripts/route-eth0

OTOH, вам не нужно экранировать . взамещающая строка, она имеет особое значение только в регулярных выражениях.

Вам также не нужен модификатор g, если multi on может появиться только один раз в строке.

...