The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Регулярное выражение для почтового адреса, !*! micis, 09-Фев-05, 08:32  [смотреть все]
Есть 2 адреса: mail1@shortdomain.ru и mail1@full.domain.ru
Они для почтового сервера равнозначны (так настроено). Но при обработке в скрипте таких адресов не могу добится от sed того же:
=====
#!/bin/bash
ML1=mail@full.domain.ru
ML2=mail@shortdomain.ru

echo $ML1 | sed "s/\@((shortdomain)|(full\.domain))/xxx/"
echo $ML2 | sed "s/\@((shortdomain)|(full\.domain))/xxx/"
=====
Что не так?

  • Регулярное выражение для почтового адреса, !*! allez, 09:32 , 09-Фев-05 (1)
    Поддержка регулярных выражений в sed реализована не полностью, и это описано в его man'e. А в вашем случае поможет такая конструкция:
    =====
    echo $ML1 | sed 's/full\.domain/xxx/' | sed 's/shortdomain/xxx/'
    echo $ML2 | sed 's/full\.domain/xxx/' | sed 's/shortdomain/xxx/'
    =====
  • Регулярное выражение для почтового адреса, !*! unk, 11:59 , 09-Фев-05 (2)
    >echo $ML2 | sed "s/\@((shortdomain)|(full\.domain))/xxx/"
    >=====
    >Что не так?
    Правильно будет так:
    sed "s/\@\(shortdomain\|full\.domain\)/xxx/"
    • Регулярное выражение для почтового адреса, !*! micis, 11:33 , 10-Фев-05 (3)
      >Правильно будет так:
      >sed "s/\@\(shortdomain\|full\.domain\)/xxx/"

      И так не работает! Методом проб и ошибок выяснилось, что весь затык в символе "|" - без него идёт (странно, не знал, что перед скобками надо ставить "\").
      Ну не верю я, что sed не поддерживает эту фичу!

      • Регулярное выражение для почтового адреса, !*! allez, 13:15 , 10-Фев-05 (4)
        >И так не работает! Методом проб и ошибок выяснилось, что весь затык
        >в символе "|" - без него идёт (странно, не знал, что
        >перед скобками надо ставить "\").
        >Ну не верю я, что sed не поддерживает эту фичу!

        Скрипт:
        ========================================
        #!/bin/bash
        ML1=mail@full.domain.ru
        ML2=mail@shortdomain.ru

        echo $ML1
        echo $ML2

        echo $ML1 | sed 's/\@\(shortdomain\|full\.domain\)/xxx/'
        echo $ML2 | sed 's/\@\(shortdomain\|full\.domain\)/xxx/'
        ========================================

        Результат его работы (Red Hat 7.2, bash 2.05, sed 3.02):
        $ ./script
        mail@full.domain.ru
        mail@shortdomain.ru
        mailxxx.ru
        mailxxx.ru

        Работает...

        А что касается "\(", то вот выдержка из man sed:
        >Regular expressions
        >       POSIX.2  BREs  should  be  supported, but they aren't completely yet.
        Перевод: регулярные выражения, соответствующие стандарту POSIX.2, должны поддерживаться, но все еще поддерживаются не полностью.
        Вывод: не работает этот вариант - воспользуйся тем, что я предложил в своем предыдущем сообщении, он сработает в любом случае.

      • Регулярное выражение для почтового адреса, !*! unk, 19:39 , 10-Фев-05 (5)
        >И так не работает! Методом проб и ошибок выяснилось, что весь затык
        Что за OS и какая версия sed???
        (Для sed из FreeBSD и GNU это не может не работать)

        • Регулярное выражение для почтового адреса, !*! micis, 03:28 , 11-Фев-05 (6)
          >>И так не работает! Методом проб и ошибок выяснилось, что весь затык
          >Что за OS и какая версия sed???
          >(Для sed из FreeBSD и GNU это не может не работать)

          Ось - Солярис 9 (а какая версия sed - хз). Скорее  всего, там не поддерживается "ветвление", т.к. я попробовал тот же пример на перле - всё ок!
          Ладно, придётся делать по совету allez-а.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру