Назад | Перейти на главную страницу

Изменение ip файла данных tinydns с помощью bash

Я использую tinydns, и мне нужно динамически изменить IP-адрес в файле данных. Я хочу использовать для этого сценарий bash.

Например файл данных:

+sub1.example.org:282.196.222.245:14400
+sub2.example.org:278.179.280.253:14400
+sub3.example.org:285.117.214.234:14400

В сценарии bash есть две переменные:

old="282.196.222.245"
new="127.0.0.1"

Ожидаю такого результата:

+sub1.example.org:127.0.0.1:14400
+sub2.example.org:278.179.280.253:14400
+sub3.example.org:285.117.214.234:14400

Как лучше всего заменить старый ip на новый (используя awk, sed или что-то еще)?

Вы можете использовать sed:

sed -i "s/$old/$new/g" filename

Вот вам простой тест:

# echo "+sub1.example.org:282.196.222.245:14400" >> filename

# cat filename
+sub1.example.org:282.196.222.245:14400

# old=282.196.222.245
# new=127.0.0.1

# sed -i "s/$old/$new/g" filename

# cat filename
+sub1.example.org:127.0.0.1:14400<br>

Я думаю, будет чище избегать попыток обезьяньего патча data; вместо этого создайте свой data из нескольких файлов, один из которых содержит только динамическую запись (и).

Затем из bash вы можете просто echo "+sub3.example.org:285.117.214.234:14400" >data.dynamic; make или похожие.

Пример Makefile:

data.cdb : data 
    tinydns-data

data : data.static data.dynamic
    cat data.static data.dynamic >data
awk -v "old=$old" -v "new=$new" '$2 == old {$2 = new} {print}' filename > tempfile && mv tempfile filename

или

awk -v "old=$old" -v "new=$new" '$2 == old {$2 = new}1' filename > tempfile && mv tempfile filename