подскажите с parse

Модератор: Модераторы разделов

Alex181
Сообщения: 44
ОС: Linux RH

подскажите с parse

Сообщение Alex181 »

Всем приветы!
Ребят, поделитесь пожалуйста знаниями в области обработки строк файла, у меня имеется такая строка

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

delete from PortList where COSWITCH = '89' and PORTNAME='GigabitEthernet0/2.1100-802.1Q vLAN subif' and PortNUM = '187'


мне надо выбрать только данные находящиеся в ' ', вариант

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

tail errsl.log | grep delete | grep -v : | awk '{print $7,$9,$10,$11,$15}' | sed 's/PORTNAME=/ /g' | sed s/\'//g

не предлагать, т.к. PORTNAME различный бывает.
За ранее благодарю.
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: подскажите с parse

Сообщение allez »

Вот, быстренько и грязненько (очень грязненько), но с данным образцом работает:

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

$ echo "delete from PortList where COSWITCH = '89' and PORTNAME='GigabitEthernet0/2.1100-802.1Q vLAN subif' and PortNUM = '187'" | cut -d "'" -f 2,4,6,8,10 | sed "s/'/\t/g"
89      GigabitEthernet0/2.1100-802.1Q vLAN subif       187

Примечание: в cut количество выводимых полей взято с запасом, в данном случае достаточно и cut -d "'" -f 2,4,6.

И еще: при обработке файла можно grep заменить на sed, так как последний работает заметно быстрее:

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

tail errsl.log | sed -n '/:/d; /delete/p' | cut -d "'" -f 2,4,6,8,10 | sed "s/'/\t/g"


P. S. Не исключено, что ваша задача решается с помощью одного лишь sed, но мне, честно признаться, лениво искать это решение. :)
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: подскажите с parse

Сообщение watashiwa_daredeska »

Ну, если совсем в лоб, то:

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

sed -r "s/^/\n/;:a;s/\n[^'\n]*'([^'\n]*)'/\n\1\n/;ta;s/^\n*//;s/\n*$//"
Спасибо сказали:
Alex181
Сообщения: 44
ОС: Linux RH

Re: подскажите с parse

Сообщение Alex181 »

allez спасибо за помощь, разобрался в
Спасибо сказали: