Доброго времени суток.
Есть 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
И так, пока строки в цсв файле не закончатся.
Помогите, пожалуйста.
Сваять конфиг для Fortigate из csv
Модераторы: /dev/random, Модераторы разделов
- /dev/random
- Администратор
- Сообщения: 5282
- ОС: Gentoo
Re: Сваять конфиг для Fortigate из csv
Если вы гарантируете, что описание можно включать в кавычки как есть, без превращения вложенных кавычек в \" и т.д., то так:
Shell
cat -n | sed 's/^[ \t]*\([0-9]\+\)[ \t]*\([^,]\+\),\([^,]\+\),\(.*\)/edit \1\nset ip \2\nset mac \3\nset description "\4"\nnext/'
Re: Сваять конфиг для Fortigate из csv
Спасибо огромное.
А как вообще можно понять и переварить эту конструкцию sed'a?????????
's/^[ \t]*\([0-9]\+\)[ \t]*\([^,]\+\),\([^,]\+\),\(.*\)/edit
???????? Просто жесть..
А как вообще можно понять и переварить эту конструкцию sed'a?????????
's/^[ \t]*\([0-9]\+\)[ \t]*\([^,]\+\),\([^,]\+\),\(.*\)/edit
???????? Просто жесть..
Re: Сваять конфиг для Fortigate из csv
А вот человекочитаемый вариант:
Код: Выделить всё
#!/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
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 - текст для подстановки
/ - конец замены
' - конец аргумента
| - передать от 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 - текст для подстановки
/ - конец замены
' - конец аргумента