Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: [Решено] скрипт для выборки текста  (Прочитано 1426 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн rustamych

  • Автор темы
  • Участник
  • *
  • Сообщений: 171
    • Просмотр профиля
[Решено] скрипт для выборки текста
« : 20 Сентября 2010, 23:55:22 »
Небольшой скрипт ниже выдает количество писем пришедших на вашу почту.  Строка: curl -u ${login}:${psswd} -s "https://mail.google.com/mail/feed/atom" выдает полную информацию о письмах. Адрес пришедшего письма
находится между <email> и </email>. Причем, если писем много, то на каждое письмо имеется такая конструкция.
Подскажите как вывести адреса? Grep видимо это не может делать.

#!/bin/bash
login="****"
psswd="****"
new=`curl -u ${login}:${psswd} -s "https://mail.google.com/mail/feed/atom" | grep -c "<entry>"`
echo $new new
« Последнее редактирование: 25 Сентября 2010, 10:46:16 от rustamych »

Оффлайн dr.akulavich

  • Участник
  • *
  • Сообщений: 191
  • Вольный стрелок
    • Просмотр профиля
    • Краплёная колода
Re: скрипт для выборки текста
« Ответ #1 : 21 Сентября 2010, 00:28:37 »
Надо курить sed для таких заклинаний. Если после:
new=`curl -u ${login}:${psswd} -s "https://mail.google.com/mail/feed/atom" | grep -c "<entry>"`добавить к строке:
| sed -e 's/.*<email>//' -e 's/<\/email>.*//'Должно работать. Правда, элегантность способа не гарантирую, ибо sed для меня те ещё дебри.
Краплёная колода — техноблог о linux, софте, интернетах.

Оффлайн rustamych

  • Автор темы
  • Участник
  • *
  • Сообщений: 171
    • Просмотр профиля
Re: скрипт для выборки текста
« Ответ #2 : 21 Сентября 2010, 00:53:01 »
Надо курить sed для таких заклинаний. Если после:
new=`curl -u ${login}:${psswd} -s "https://mail.google.com/mail/feed/atom" | grep -c "<entry>"`добавить к строке:
| sed -e 's/.*<email>//' -e 's/<\/email>.*//'Должно работать. Правда, элегантность способа не гарантирую, ибо sed для меня те ещё дебри.
Не работает. На выходе нет ничего. Если убрать | grep -c "<entry>" и оставить только  new=`curl -u ${login}:${psswd} -s "https://mail.google.com/mail/feed/atom"` | sed -e 's/.*<email>//' -e 's/<\/email>.*//' то на выходе будет только слово new, что выдает echo, без нужного техта.

Оффлайн VestniK

  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Re: скрипт для выборки текста
« Ответ #3 : 21 Сентября 2010, 01:16:35 »
Я правильно понимаю, что на выходе честный xml? Если да, то лучше уж написать XSLT шаблон выбирающий то что нужно и конвертирующий в то что нужно и просто использовать xsltproc

Пример:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" encoding="UTF-8" media-type="text/plain"/>

<xsl:template match="/">
  <xsl:for-each select="//email">
    <xsl:text>Found new email: </xsl:text>
    <xsl:value-of select="."/>
    <xsl:text>;&#10;</xsl:text>
  </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

Сохрани это в файл template.xsl и попробуй запустить
curl -u ${login}:${psswd} -s "https://mail.google.com/mail/feed/atom" | xsltproc template.xsl -

Пользователь решил продолжить мысль 20 Сентября 2010, 13:50:37:
Решил попробовать, и обнаружил, что нужна небольшая магия с namespace. Вот это преобразование работает как надо:
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:atom="http://purl.org/atom/ns#">
<xsl:output method="text" encoding="UTF-8" media-type="text/plain"/>

<xsl:template match="/">
  <xsl:for-each select="//atom:author">
    <xsl:text>Found new email: </xsl:text>
    <xsl:value-of select="./atom:email"/>
    <xsl:text>;&#10;</xsl:text>
  </xsl:for-each>
</xsl:template>

</xsl:stylesheet>
« Последнее редактирование: 21 Сентября 2010, 11:36:04 от VestniK »

Оффлайн xbox800

  • Любитель
  • *
  • Сообщений: 66
    • Просмотр профиля
Re: скрипт для выборки текста
« Ответ #4 : 21 Сентября 2010, 13:57:26 »
Где-то на этом форуме видел вот такое:
curl -u ЛОГИН@gmail.com:ПАРОЛЬ --silent "https://mail.google.com/mail/feed/atom" | tr -d '\n' | awk -F '<entry>' '{for (i=2; i<=NF; i++) {print $i}}' | perl -pe 's/^<title>(.*)<\/title>.*<email>(.*)<\/email>.*$/$2 - $1/'

Оффлайн rustamych

  • Автор темы
  • Участник
  • *
  • Сообщений: 171
    • Просмотр профиля
Re: скрипт для выборки текста
« Ответ #5 : 24 Сентября 2010, 20:46:10 »
Где-то на этом форуме видел вот такое:
curl -u ЛОГИН@gmail.com:ПАРОЛЬ --silent "https://mail.google.com/mail/feed/atom" | tr -d '\n' | awk -F '<entry>' '{for (i=2; i<=NF; i++) {print $i}}' | perl -pe 's/^<title>(.*)<\/title>.*<email>(.*)<\/email>.*$/$2 - $1/'
Спасибо всем. Хорошо, что есть такое грамотное сообщество. Я попробовал второй код, работает. Вызывают восхищение те, кто может такой ребус написать. Я пытаюсь разгадать его уже пару дней и не понимаю. Синтаксис команд есть, но почему это работает все вместе остается загадкой. Может кто может расшифровать что делает каждая опция.

 

Страница сгенерирована за 0.834 секунд. Запросов: 27.