LINUX.ORG.RU

expr match, jabber бот, bash и все все все

 , ,


0

1

помогите позязя извлечь данные из xml при помощи регулярных выражений.

вот такая строка

xml="<iq id='ask_version' type='get' to='spoofing@spfng.com/spoofing_home' from='spfng.com'><query xmlns='jabber:iq:version'/></iq>"

делаем

expr match "$xml" '.*[^<]*\(<[[:space:]]*[qQ][uU][eE][rR][yY][[:space:]]*\([^>]\)*>\).*'

получили тэг query

а теперь надобно получить содержимое аттрибута xmlns, ну и не только.

проблема в том, что expr match смотрит как-то на всю строку, а не ищет первое совпадение. тобишь для него attr='(.*)' это не какое-то там значение внутри аттрибута, а вся строка от ' и до '.

ощщем, никак не могу с ним совладать :( подскажите, как при помощи expr match извлечь содержимое аттрибутов из html/xml тегов, просто первый аттрибут по маске, у меня ничерта не получается.

expr match "$xml" '.*\(.*[tT][oO]=\([^'\'']*\)*'\''*\).*'
в данном случае пробовал извлекать to=" из первого iq.

http://i.imgur.com/eOytXou.png — скриншот для затравки, почти работает, осталось научиться выдергивать параметры из XML тега и запилить ответы на ping и версию клиента, который запрашивает жаббер сервер яндыкса. и уже тогда заниматься делами насущными, прикручивая к боту любой функционал.

выложу на паблик, как доделаю минимально необходимое к клиенту.

★★★★★

Некоторые люди, столкнувшись с проблемой, думают: «О, а использую-ка я регулярные выражения». Теперь у них есть две проблемы. © Джейми Завински

Black_Roland ★★★★
()
Последнее исправление: Black_Roland (всего исправлений: 2)
Ответ на: комментарий от a1batross

одни идиоты придумывают инструмент, а потом другие идиоты запрещают им пользоваться. вся суть айти.

Spoofing ★★★★★
() автор топика
Ответ на: комментарий от shrub

Библиотеки юзать может любой дебил. Для регулярок нужно iq>42.

emulek
()

Используй xml либы и не морочь себе голову.

gear ★★★
()
Ответ на: комментарий от gear

стоило только поныть, как все получилось. =)

всем спасибо.

Spoofing ★★★★★
() автор топика
Ответ на: комментарий от emulek

стараюсь не использовать сторонний софт без крайней необходимости, это jabber клиент или бот, написан на чистом bash, единственная сторонняя программа — openssl, чтобы собственно держать подключение к жаббер серверам.

я уж и от expr отказался, в bash тоже есть регексы оказывается, [[ string =~ regex ]] и дергаются через ${BASH_REMATCH[@]}.

до полноценного клиента конечно далеко, но хотя бы sendxmpp запилить, который будет отправлять из консольки сообщения аки sendmail, уже хорошая полезная вещь. =)

а на бота у меня свои планы.. расскажу потом.

Spoofing ★★★★★
() автор топика
Ответ на: комментарий от Spoofing

Всегда пожалуйста:) Я просто не понимаю зачем тратить время на изобретение велосипеда на баше, когда можно взять перл с libxmpp и сразу браться за реализацию логики бота?

gear ★★★
()
Последнее исправление: gear (всего исправлений: 1)
# так как xmlns -- namespace
# может потребуется дополнительная фильтрация
xmlstarlet sel -t -v "//namespace::*[name()='']" jabber.xml
# а так обычные аттрибуты
xmlstarlet sel -t -v '/iq/@to' jabber.xml

Пакет: xmlstarlet — может в xslt, xpath и многое другое.

anonymous
()
Ответ на: комментарий от anonymous

стараюсь не использовать сторонний софт без крайней необходимости, это jabber клиент или бот, написан на чистом bash, единственная сторонняя программа — openssl, чтобы собственно держать подключение к жаббер серверам.

Ле.

anonymous
()

в книге Damien Conway - Perl Best Practices, есть целая глава посвященная по работе с регулярными значениями.

в частности разбирается разница между /A и /G.

возможно тебе нужно регулярное выражение с /G

Nurmukh ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.