Удаление подстроки последнего совпадения, vfp7, 02-Окт-12, 12:10 [смотреть все]Добрый деньНе получается в одну строку вырезать из логов роутера порт компьютера: на входе лог типа: ... Oct 2 11:59:03 isa8 isa8: Local User (MAC=02-57-6C-72-2E-EE): 192.168.3.14:50561 -> 83.252.252.11:80 (TCP)Web ... На этот лог я натравливаю скрипт: cat /var/log/isa8.log | grep '(TCP)Web' | cut -f-4,10,12 -d' ' | cut -f-4 -d':' Получаю на выходе: Oct 2 11:59:03 192.168.3.14:50561 83.252.252.11 Осталось удалить подстроку порта :50561, и хоть лопни, одной строкой не получается привести к виду: Oct 2 11:59:03 192.168.71.14 83.252.252.11 Бился с sed, ( примерно sed 's/\(.*\):[0-9]//' ), не получается, не хватает знаний ... FreeBSD 9.0 sh
|
- Удаление подстроки последнего совпадения, allez, 15:03 , 02-Окт-12 (1)
>[оверквотинг удален] > cat /var/log/isa8.log | grep '(TCP)Web' | cut -f-4,10,12 -d' ' | cut > -f-4 -d':' > Получаю на выходе: > Oct 2 11:59:03 192.168.3.14:50561 83.252.252.11 > Осталось удалить подстроку порта :50561, и хоть лопни, одной строкой не получается > привести к виду: > Oct 2 11:59:03 192.168.71.14 83.252.252.11 > Бился с sed, ( примерно sed 's/\(.*\):[0-9]//' ), не получается, не хватает > знаний ... > FreeBSD 9.0 sh Попробуйте так:
$ echo 'Oct 2 11:59:03 192.168.3.14:50561 83.252.252.11' | sed -r 's/:[0-9]{4,5} / /' Oct 2 11:59:03 192.168.3.14 83.252.252.11
Правда, есть два момента. Во-первых, FreeBSD у меня сейчас под рукой нет, эта команда была мной опробована в OpenBSD. А во-вторых, я слегка схалявил и заставил sed заменять в строке двоеточие, за которым следует от 4 до 5 цифр и пробел, на одиночный пробел. Если в логе вдруг попадется строка в которой будет фигурировать номер порта из трех и менее знаков, то мой фильтр не сработает. Усовершенствовать команду предоставляю вам. :-)
- Удаление подстроки последнего совпадения, vfp7, 15:13 , 02-Окт-12 (2)
tnx Номер порта в диапазоне 1024-65535, то есть минимум 4 цифры, так что все зер гут. На фряхе все прошло. Проблема снята.cat /var/log/isa8.log | grep '(TCP)Web' | cut -f-4,10,12 -d' ' | cut -f-4 -d':' | sed -r 's/:[0-9]{4,5} / /'
|