Как передать аргументы функции или цикла в bash в моем случае ?. Разделителем поля будет пространство, а также следующая строка (\ n). Цель состоит в том, чтобы получить все команды маршрута из файла журнала, а затем повторно применить их, но удалять их перед применением.bash function pass space & line разделенные аргументы от sed
file.log
Mon Nov 7 10:55:28 2016 bla bla bla
Mon Nov 7 10:55:28 2016 bla blabla bla
Mon Nov 7 11:19:27 2016 /sbin/route add -net 123.123.123.0 123.123.123.104 255.255.240.0
Mon Nov 7 11:19:27 bla bla bla
Mon Nov 7 11:19:27 2016 /sbin/route add -net 111.111.111.111 192.168.1.1 255.255.255.255
Mon Nov 7 11:19:32 2016 /sbin/route add -net 4.4.2.2 224.224.224.1 255.255.255.255
Mon Nov 7 11:19:32 bla blabla bla
Mon Nov 7 11:19:32 2016 /sbin/route add -net 222.222.222.222 224.224.224.1 255.255.255.255
Mon Nov 7 11:20:21 bla blabla bla
Mon Nov 7 11:20:21 bla bla bla
Mon Nov 7 11:20:23 bla bla bla
Следующие выдержки команды маршрута из файла журнала будут добавлены,
sed -n 's/^.*\(\/sbin\/route\ add \-net\)/\1/p' /path/to/file.log | awk '!seen[$0]++'
Вот что я пытаюсь с функцией Баш,
#!/bin/bash
add_routes() {
$1 delete $3 $4 $5 $6 #expecting: eg: /sbin/route delete -net 4.4.2.2 224.224.224.1 255.255.255.255
[email protected] #expecting: eg: /sbin/route add -net 4.4.2.2 224.224.224.1 255.255.255.255
}
add_routes $(sed -n 's/^.*\(\/sbin\/route\ add \-net\)/\1/p' /path/to/file.log | awk '!seen[$0]++')
Желаемая команда вывода, выполняемая последовательно из указанной функции (сначала удалите ее, чтобы применить последние Маршрутная сеть извлечена из журнала),
/sbin/route delete -net 123.123.123.0 123.123.123.104 255.255.240.0
/sbin/route add -net 123.123.123.0 123.123.123.104 255.255.240.0
/sbin/route delete -net 111.111.111.111 192.168.1.1 255.255.255.255
/sbin/route add -net 111.111.111.111 192.168.1.1 255.255.255.255
/sbin/route delete -net 4.4.2.2 224.224.224.1 255.255.255.255
/sbin/route add -net 4.4.2.2 224.224.224.1 255.255.255.255
/sbin/route delete -net 222.222.222.222 224.224.224.1 255.255.255.255
/sbin/route add -net 222.222.222.222 224.224.224.1 255.255.255.255
из приведенной выше функции, $ @ выполняет вставляя все команды маршрута в одной строке, которая терпит неудачу. И команда delete (выше $ @ line) удаляет только первый маршрут.
Кто-нибудь знает, как получить желаемый результат с функциями или с for loop
, если он выполнит свою работу ?. Благодаря!
К сожалению, в реальном файле журнала он не начинается с команды route, а префиксами с датой и временем. Это моя ошибка не для того, чтобы упорядочить файл.log. Кстати, я использую sed, чтобы избежать дублирования маршрутов. Я действительно не знаю, что мы можем сделать это с помощью bash, хорошо знать новые вещи. Удивление, если вы можете редактировать, чтобы он читал команду маршрута, даже если он не начинал сначала в строке ... – user465465
Обновлен мой вопрос! – user465465
NIce, небольшая проблема с сортировкой - я теряю последовательность, которую он должен выполнить по сравнению с awk. – user465465