Shorewall-lite - это очень легкий инструмент для управления конфигурацией межсетевого экрана, созданной на другом сервере. Он не подходит для настройки конфигурации, но позволяет управлять сгенерированной конфигурацией. Он неплохо работает на OpenWRT, дистрибутиве, предназначенном для маршрутизаторов.
Текущая версия Shorewall основана на Perl. Это может сделать установку намного больше, чем вы хотели бы для маршрутизатора.
Из инструментов, которые я использовал, я считаю Shorewall самым простым в использовании. Есть пример конфигурации, которая обычно требует небольших изменений. Я довольно легко выполнил довольно сложную конфигурацию для небольшой сети.
вы можете попробовать это:
#!/bin/bash
cat file |sed '1d' | while IFS= read line; do
n1=$(echo $line | awk '{print $1}')
n2=$(echo $line | awk '{print $3}')
echo "
delayMicroseconds($n1);
pulseIR($n2);
"
done
delayMicroseconds(62640);
pulseIR(3500);
delayMicroseconds(1640);
pulseIR(480);
delayMicroseconds(360);
pulseIR(520);
delayMicroseconds(1200);
pulseIR(500);
delayMicroseconds(340);
pulseIR(520);
В качестве альтернативы вы можете попробовать perl
следующим образом;
perl -pe 's/(\d+)[\D]+(\d+)[\D]+/delayMicroseconds($1);\npulseIR($2);\n/' file
delayMicroseconds(62640);
pulseIR(3500);
delayMicroseconds(1640);
pulseIR(480);
delayMicroseconds(360);
pulseIR(520);
delayMicroseconds(1200);
pulseIR(500);
delayMicroseconds(340);
pulseIR(520);
Здесь нет необходимости в каких-либо регулярных выражениях -только printf
для форматирования полей в строку:
$ awk '{printf("delayMicroseconds(%d);\npulseIR(%d);\n", $1, $3)}' file
delayMicroseconds(62640);
pulseIR(3500);
delayMicroseconds(1640);
pulseIR(480);
delayMicroseconds(360);
pulseIR(520);
delayMicroseconds(1200);
pulseIR(500);
delayMicroseconds(340);
pulseIR(520);
С GNU sed:
$ sed -Ee 's/([0-9]+) usec, ([0-9]+) usec.*/delayMicroseconds(\1);\npulseIR(\2);/' < data
delayMicroseconds(62640);
pulseIR(3500);
...
-E
указывает sed
использовать расширенные регулярные выражения (*), команда s/pattern/replacement/
запускает операцию поиска -замены в текущей строке(sed
повторяет инструкции, данные для каждой входной строки ).
Шаблон имеет вид ([0-9]+) usec, ([0-9]+) usec.*
, где [0-9]
означает одну любую цифру, +
любое число предыдущего «атома», а (...)
сохраняет («захватывает» )все, что совпало. Итак, ([0-9]+)
означает любое количество любых цифр и сохраняет результат. Буквы сопоставляются как -, а конечная .*
соответствует любому количеству любых символов, просто чтобы съесть возможный мусор в конце строки.
При замене \1
и \2
заменяются сохраненным содержимым групп (...)
(, но сами скобки здесь буквальные ), а \n
означает символы новой строки (. ] это может работать не на всех sed
s ).
(*)См. Почему мое регулярное выражение работает в X, но не в Y? для различия между различными типами регулярных выражений. Кроме того, в Интернете есть несколько руководств по sed
. Я предлагаю найти один или два и поиграться с ними, хотя бы для ознакомления с командой s///
.
Использование GNU awk:
awk -v RS=' usec[,\n] ?' '{print (NR%2?"delayMicroseconds":"pulseIR")"("$0")"}' file
В качестве разделителя записей используется строка usec
. Это позволяет перехватывать каждое число как отдельную запись, поэтому команда print
альтернативно отображает 2 строки с нужным числом.