Удаление строки, содержащей строку, хранящуюся в переменной, не работающей в sed - PullRequest
0 голосов
/ 24 апреля 2018

Я пытаюсь удалить существующую запись зоны из файла named.conf bind (в выпуске CentOS 7).

Запись зоны выглядит следующим образом:

zone "example.com" IN {
        type master;
        file "example.com.zone";
};

Команда:

sed -nie '/\"example.com\"/,/^\};$/d;p;' /etc/named.conf

удаляет эту запись (как и предполагалось).

Затем я создал следующий скрипт оболочки (rm-zone.sh) с исполняемыми разрешениями для выполнения той же работы:

#!/bin/sh

[ $# -lt 1 ] && {
        echo "usage: $0 <domain>"
        exit 1
}

domain=$1

sed -nie '/\"$domain\"/,/^\};$/d;p;' /etc/named.conf

rndc reload

echo Zone: $domain deleted successfully

Когда я вхожу в систему как пользователь root и запускаю команду:

./rm-zone.sh example.com

Я вижу сообщение "Zone example.com успешно удалено", но зона все еще находится в моем имени.conf file ...

Опять же, когда я даю вышеупомянутую команду из cli:

sed -nie '/\"example.com\"/,/^\};$/d;p;' /etc/named.conf

зона правильно удалена !!!

Видимо, что-то естьнеправильно в сценарии оболочки, но не удалось выяснить, что это такое.

Будем весьма благодарны за любые идеи относительно того, что мне здесь не хватает!

1 Ответ

0 голосов
/ 25 апреля 2018

Ваша идея верна, но для расширения переменной domain она должна присутствовать в двойных кавычках. Оболочка расширяет переменные перед передачей аргументов в sed, без кавычек, шаблон $domain интерпретируется как буквенная строка. Вы можете вложить цитаты следующим образом

sed -nie '/\"'"$domain"'\"/,/^\};$/d;p;' /etc/named.conf
...