LINUX.ORG.RU

Добавление значений в определенные строки

 , , ,


1

2

Добрый день!

Подскажите как написать bash-скрипт, допустим с помощью sed или awk, который смог бы добавить значение в определенные строки. Если быть подробнее, у меня есть dhcp с дохрениллион сетей, реально их много, в этих сетях прописаны статические роуты и вот такая напасть задалась, что надо добавить еще один роут в каждую сеть, делать это руками жесть, да и не собирался собственно говоря, но вот как бы я не использовал sed или awk (с циклами/без них или шаманским бубном) ничего у меня не выходит. Решил обратится за помощью.

Для примера:

 shared-network SETKA { 
        subnet 5.5.5.55 netmask  255.255.255.248 { 
        } 
        subnet  10.30.20.0 netmask  255.255.255.0 { 
                option routers  10.30.20.1 ; 
                option subnet-mask 255.255.255.0; 
                option ms-classless-static-routes 32, 176,0,16,5, 10,30,20,1, 32, 25,25,2,3, 10,30,20,1; 
                option rfc3442-classless-static-routes 32, 176,0,16,5, 10,30,20,1, 32, 25,25,2,3, 10,30,20,1; 
                pool { 
                        range  10.30.20.2  10.30.20.120; 
                } 
        } 
}

Теперь допустим между (176,0,16,5, 10,30,20,1,) и (32, 25,25,2,3,) я хочу воткнуть 32, 2,2,2,2, 10,30,20,1,; чтобы стало вот так:

                option ms-classless-static-routes 32, 176,0,16,5, 10,30,20,1,  32, 2,2,2,2, 10,30,20,1,  32, 25,25,2,3, 10,30,20,1; 
                option rfc3442-classless-static-routes 32, 176,0,16,5, 10,30,20,1,  32, 2,2,2,2, 10,30,20,1,  32, 25,25,2,3, 10,30,20,1;  


Для каждой сети отличается только шлюз, т.е. такие ip'ы, как 176,0,16,5 и 25,25,2,3,; они постоянны, для каждой сетки меняется только 10,30,20,1. И вот мне нужно вставить между двумя этими роутами новый - 32, 2,2,2,2, но после чтобы подставлялся свой шлюз для каждой сети.



Последнее исправление: amkgi (всего исправлений: 1)

sed
Только сформируй нормально правило, а то вот это дает нужный результат, но, скорее всего это не то, что тебе нужно:

$ echo ' shared-network SETKA {
        subnet 5.5.5.55 netmask  255.255.255.248 {
        }
        subnet  10.30.20.0 netmask  255.255.255.0 {
                option routers  10.30.20.1 ;
                option subnet-mask 255.255.255.0;
                option ms-classless-static-routes 32, 176,0,16,5, 10,30,20,1, 32, 25,25,2,3, 10,30,20,1;
                option rfc3442-classless-static-routes 32, 176,0,16,5, 10,30,20,1, 32, 25,25,2,3, 10,30,20,1;
                pool {
                        range  10.30.20.2  10.30.20.120;
                }
        }
}' | sed 's/176,0,16,5, 10,30,20,1, /\032, 2,2,2,2, 10,30,20,1,/g'


 shared-network SETKA {
        subnet 5.5.5.55 netmask  255.255.255.248 {
        }
        subnet  10.30.20.0 netmask  255.255.255.0 {
                option routers  10.30.20.1 ;
                option subnet-mask 255.255.255.0;
                option ms-classless-static-routes 32, 176,0,16,5, 10,30,20,1, 32, 2,2,2,2, 10,30,20,1,32, 25,25,2,3, 10,30,20,1;
                option rfc3442-classless-static-routes 32, 176,0,16,5, 10,30,20,1, 32, 2,2,2,2, 10,30,20,1,32, 25,25,2,3, 10,30,20,1;
                pool {
                        range  10.30.20.2  10.30.20.120;
                }
        }
}

Kroz ★★★★★
()
Ответ на: комментарий от beastie

Взять любую template engine (хоть m4, хоть jinja, хоть сам bash)
m4

Над людьми издеваться нехорошо

Kroz ★★★★★
()
Ответ на: комментарий от unterwulf

Огромнейшее спасибо!!! Это то, что надо. Я только запятую еще добавил после router в конце, чтоб он ее вставил, а так все супер! Очень выручили!

amkgi
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.