The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Почему не срабатывает sed "
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Почему не срабатывает sed "  +/
Сообщение от xDee (ok) on 29-Ноя-13, 14:35 
Доброго всем дня ! Подскажите не срабатывает удаление строки из файла вот этого скрипта

#!/bin/sh

DATA=$(date +%F.%H-%M)
SERV="10.10.12.17"

if eval "ping -c 1 $SERV"
then
echo "SERV 1" >>/tmp/test.txt
else
echo "$DATA | SERV no Ping start double check" >>/tmp/testLOG.txt
ping -c 1 $SERV

if [ $? != 0 ]
then
echo "$DATA | SERV no Ping add 0 in log" >>/tmp/testLOG.txt
echo "SERV 0" >>/tmp/test.txt
else
echo "$DATA | false alarm" >>/tmp/testLOG.txt
fi
fi
if grep "SERV 0" /tmp/test.txt
then
sed -i '/vpn 0 IN A ${SERV}/d' /tmp/db.local
else
echo "vpn 0 IN A ${SERV}" >> /tmp/db.local
echo "It's OK !" >>/tmp/testLOG.txt
fi

Строка sed -i '/vpn 0 IN A ${SERV}/d' /tmp/db.local не удаляет эту строку , хотя вывод
vpn 0 IN A ${SERV} показывает правильно. Что я делаю неправильно?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Почему не срабатывает sed "  +/
Сообщение от Аноним (??) on 29-Ноя-13, 14:47 
> Строка sed -i '/vpn 0 IN A ${SERV}/d' /tmp/db.local не удаляет эту
> строку , хотя вывод
> vpn 0 IN A ${SERV} показывает правильно. Что я делаю неправильно?

Одинарные кавычки. Переменные внутри них не раскрываются.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Почему не срабатывает sed "  +/
Сообщение от xDee (ok) on 29-Ноя-13, 14:55 
>> Строка sed -i '/vpn 0 IN A ${SERV}/d' /tmp/db.local не удаляет эту
>> строку , хотя вывод
>> vpn 0 IN A ${SERV} показывает правильно. Что я делаю неправильно?
> Одинарные кавычки. Переменные внутри них не раскрываются.

К сожалению изменение на sed -i "/vpn 0 IN A ${SERV}/d" /tmp/db.local ничего не изменила, файл db.local на всякий случай

vpn 0 IN A 10.10.12.15
vpn 0 IN A 10.10.12.16
vpn 0 IN A 10.10.12.17
vpn 0 IN A 10.10.12.18


Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Почему не срабатывает sed "  +/
Сообщение от romiks (ok) on 29-Ноя-13, 18:10 
>>> Строка sed -i '/vpn 0 IN A ${SERV}/d' /tmp/db.local не удаляет эту
>>> строку , хотя вывод
>>> vpn 0 IN A ${SERV} показывает правильно. Что я делаю неправильно?
>> Одинарные кавычки. Переменные внутри них не раскрываются.
> К сожалению изменение на sed -i "/vpn 0 IN A ${SERV}/d" /tmp/db.local
> ничего не изменила, файл db.local на всякий случай
> vpn 0 IN A 10.10.12.15
> vpn 0 IN A 10.10.12.16
> vpn 0 IN A 10.10.12.17
> vpn 0 IN A 10.10.12.18

BSD ?

sed -i "" "/vpn 0 IN A ${SERV}/d" /tmp/db.local

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Почему не срабатывает sed "  +/
Сообщение от xDee (ok) on 02-Дек-13, 11:21 
>[оверквотинг удален]
>>>> vpn 0 IN A ${SERV} показывает правильно. Что я делаю неправильно?
>>> Одинарные кавычки. Переменные внутри них не раскрываются.
>> К сожалению изменение на sed -i "/vpn 0 IN A ${SERV}/d" /tmp/db.local
>> ничего не изменила, файл db.local на всякий случай
>> vpn 0 IN A 10.10.12.15
>> vpn 0 IN A 10.10.12.16
>> vpn 0 IN A 10.10.12.17
>> vpn 0 IN A 10.10.12.18
> BSD ?
> sed -i "" "/vpn 0 IN A ${SERV}/d" /tmp/db.local

Да BSD ! Спасибо так сработало.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Почему не срабатывает sed "  +/
Сообщение от xDee (ok) on 03-Дек-13, 11:30 
>[оверквотинг удален]
>>>> Одинарные кавычки. Переменные внутри них не раскрываются.
>>> К сожалению изменение на sed -i "/vpn 0 IN A ${SERV}/d" /tmp/db.local
>>> ничего не изменила, файл db.local на всякий случай
>>> vpn 0 IN A 10.10.12.15
>>> vpn 0 IN A 10.10.12.16
>>> vpn 0 IN A 10.10.12.17
>>> vpn 0 IN A 10.10.12.18
>> BSD ?
>> sed -i "" "/vpn 0 IN A ${SERV}/d" /tmp/db.local
> Да BSD ! Спасибо так сработало.

Подскажите пожалуйста, у меня немного изменилась задача. Я пингую сервера по одним IP, а в зону нужно добавить по привязке к другому, т.е. есть текстовой файл  в котором есть эти привязки в виде :
172.20.2.1 10.100.100.1
172.20.2.2 10.100.100.2
172.20.2.3 10.100.100.3
Как переменную $i сопоставить с ip в первой колонке, а в зону внести данные из второй колонки ? Подозреваю что нужно использовать awk или grep, но вот саму конструкцию не представляю.    

#!/bin/sh
FILE="file_ip.txt"

for i in 172.20.2.1 172.20.2.2 172.20.2.3;
do
if eval "ping -c 2 $i"> /dev/null;
then
file="/tmp/ping/file`echo $i`"

if [ -e $file ];
then
rm "/tmp/ping/file`echo $i`"
echo "vpn 0 IN A $i" >>/etc/bind/db.local  # Вот здесь должна быть другая переменная
echo "$(date +%d-%m-%y\ %H:%M:%S) resumption of rotation $i " >>/var/log/bad_ip.log
fi
echo "11" > /dev/null
else
file="/tmp/ping/file`echo $i`"
if [ -e $file ];
then
echo "11" > /dev/null
else
sed -i "/vpn 0 IN A $i/d" /etc/bind/db.local
touch "/tmp/ping/file`echo $i`"
echo "$(date +%d-%m-%y\ %H:%M:%S) detected BAD IP $i, delete of zone " >>/var/log/bad_ip.log
fi
fi
done
rndc reload

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Почему не срабатывает sed "  +/
Сообщение от xDee (ok) on 03-Дек-13, 16:55 
>[оверквотинг удален]
> echo "11" > /dev/null
> else
> sed -i "/vpn 0 IN A $i/d" /etc/bind/db.local
> touch "/tmp/ping/file`echo $i`"
> echo "$(date +%d-%m-%y\ %H:%M:%S) detected BAD IP $i, delete of zone "
> >>/var/log/bad_ip.log
> fi
> fi
> done
> rndc reload

Нашел решение, правда не знаю правильно ли но тем не менее работает:

z=$(grep "$i" $IP | awk '{print $1}')
echo "vpn 0 IN A $z" >>/tmp/db.local #add address

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру