Сваять конфиг для Fortigate из csv

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Ответить
JTMarsh
Сообщения: 143
ОС: Debian

Сваять конфиг для Fortigate из csv

Сообщение JTMarsh »

Доброго времени суток.
Есть csv файл вида
ай-пи адрес1,мак-адрес1,описание1
ай-пи адрес2,мак-адрес2,описание2
ай-пи адрес3,мак-адрес3,описание3

Надо на выходе получить конструкцию вида
edit 1
set ip ай-пи адрес1
set mac мак-адрес1
set description "описание1"
next
edit 2
set ip ай-пи адрес2
set mac мак-адрес2
set description "описание2"
next
edit 3
set ip ай-пи адрес3
set mac мак-адрес3
set description "описание3"
next

И так, пока строки в цсв файле не закончатся.

Помогите, пожалуйста.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5282
ОС: Gentoo

Re: Сваять конфиг для Fortigate из csv

Сообщение /dev/random »

Если вы гарантируете, что описание можно включать в кавычки как есть, без превращения вложенных кавычек в \" и т.д., то так:

Shell

cat -n | sed 's/^[ \t]*\([0-9]\+\)[ \t]*\([^,]\+\),\([^,]\+\),\(.*\)/edit \1\nset ip \2\nset mac \3\nset description "\4"\nnext/'
Спасибо сказали:
JTMarsh
Сообщения: 143
ОС: Debian

Re: Сваять конфиг для Fortigate из csv

Сообщение JTMarsh »

Спасибо огромное.
А как вообще можно понять и переварить эту конструкцию sed'a?????????
's/^[ \t]*\([0-9]\+\)[ \t]*\([^,]\+\),\([^,]\+\),\(.*\)/edit
???????? Просто жесть..
Спасибо сказали:
Аватара пользователя
Vascom
Сообщения: 1699
ОС: Fedora 32

Re: Сваять конфиг для Fortigate из csv

Сообщение Vascom »

А вот человекочитаемый вариант:

Код: Выделить всё

#!/bin/bash

n=1
while read LINE
do
    ip=$(echo "$LINE" | cut -d "," -f1)
    mac=$(echo "$LINE" | cut -d "," -f2)
    desc=$(echo "$LINE" | cut -d "," -f3)

    echo -e "edit $n
        \rset ip $ip
        \rset mac $mac
        \rdescription \"$desc\""
    n=$((n + 1))
done < ip.csv

Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5282
ОС: Gentoo

Re: Сваять конфиг для Fortigate из csv

Сообщение /dev/random »

cat -n - пронумеровать строки
| - передать от cat к sed
sed - команда sed с аргументом ниже
' - всё, что между апострофами - один аргумент
s - команда поиска и замены
/ - разделитель: имя команды кончилось, началось регулярное выражение для поиска
^ - начало строки
[ \t]* - любое количество пробелов и табов
\([0-9]\+\) - не меньше одной цифры (номер строки, выданный cat -n). В экранированных скобках = запомнить как подстановку номер 1
[ \t]* - любое количество пробелов и табов
\([^,]\+\) - не меньше одного символа, не являющегося запятой. Запомнить как подстановку номер 2
, - запятая
\([^,]\+\) - см. выше, подстановка номер 3
, - запятая
\(.*\) - любое количество любых символов, подстановка номер 4
/ - разделитель: поиск кончился, началась замена
edit - текст для подстановки
\1 - вставить подстановку номер 1 (номер строки)
\n - перевод строки
set ip - текст для подстановки
\2 - вставить подстановку номер 2
\n - перевод строки
set mac - текст для подстановки
\3 - подстановка номер 3
\n - перевод строки
set description " - текст для подстановки
\4 - подстановка номер 4
" - текст для подстановки
\n - перевод строки
next - текст для подстановки
/ - конец замены
' - конец аргумента
Спасибо сказали:
Ответить