Команда sed для удаления строки, соответствующей шаблону, не работает в моем случае - PullRequest
0 голосов
/ 01 ноября 2018

Это содержимое моего файла / etc / sysconfig / network-scripts / route-eth0:

192.168.1.12/32 via 172.16.1.60
192.168.1.0/24 via 172.16.60.1

Я удаляю строку с помощью следующей команды sed:

sed  -i  '#192.168.1.0/24 via 172.16.60.1#d'   /etc/sysconfig/network-scripts/route-eth0

Но соответствующая строка (в нашем случае строка 2) не удаляется. Есть идеи?

Примечание: Я использую # (символ хеша) в качестве разделителя в команде sed, потому что / (символ косой черты) является частью моего шаблона.

Ответы [ 4 ]

0 голосов
/ 01 ноября 2018

gnu sed поддерживает шаблон REGEX в качестве адреса. Вы можете использовать любой разделитель, который вам нравится, например s (замена)

Вы можете сделать:

sed '\%pat%d'
sed '\#pat#d'
sed '\@pat@d'

То есть вы просто экранируете первый # в вашем коде, ваша команда будет работать.

0 голосов
/ 01 ноября 2018

Не могли бы вы попробовать следующее.

grep -v '192\.168\.1\.0/24 via 172\.16\.60\.1' Input_file > temp_file && mv temp_file Input_file

С awk:

awk '!/192\.168\.1\.0\/24 via 172\.16\.60\.1/' Input_file > temp_file && mv temp_file Input_file
0 голосов
/ 01 ноября 2018

С GNU sed: заменить сначала # на \#.

0 голосов
/ 01 ноября 2018

Если экранирование / символов в выражении является проблемой, вы можете использовать awk:

awk -v search='192.168.1.0/24 via 172.16.60.1' '$0 != search' file > file.tmp \
&& mv file.tmp file

или на месте с gawk:

gawk -i inplace -v search='192.168.1.0/24 via 172.16.60.1' '$0 != search' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...