Получить e-mail адрес из SOA-записи DNS

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
xM
ст. лейтенант
Сообщения: 1184
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Получить e-mail адрес из SOA-записи DNS

Непрочитанное сообщение xM » 2017-05-01 19:33:55

Ситуация следующая. В SOA-записях DNS хранится e-mail адрес в несколько необычном формате и его нужно оттуда извлечь (это просто) привести в божеский вид (несколько сложнее).
Например, e-mail this.my.email@my.lovely.personal.domain будет записан в SOA как this\.my\.email.my.lovely.personal.domain..
Задача обратить его в первоначальный вид средствами shell.
Я эту проблему решил набором перезаписей в sed но как-то, на мой вкус, некрасиво.

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

# echo "this\.my\.email.my.lovely.personal.domain." | sed -e 's/\\\./\\/g' -e 's/\./@/' -e 's/\\/\./g' -e 's/.$//'
this.my.email@my.lovely.personal.domain

Наверняка есть вариант покрасивее.
IT voodoo blog https://kostikov.co

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 34924
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Получить e-mail адрес из SOA-записи DNS

Непрочитанное сообщение Alex Keda » 2017-05-15 9:49:20

чего некрасиво-то?
работает - и хай работает
Убей их всех! Бог потом рассортирует...

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1184
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Получить e-mail адрес из SOA-записи DNS

Непрочитанное сообщение xM » 2017-05-16 12:16:35

Alex Keda писал(а):Источник цитаты чего некрасиво-то?

Нет чувства удовлетворённости :-)
IT voodoo blog https://kostikov.co

Аватара пользователя
f_andrey
майор
Сообщения: 2633
Зарегистрирован: 2007-12-26 1:22:58
Откуда: СПб
Контактная информация:

Получить e-mail адрес из SOA-записи DNS

Непрочитанное сообщение f_andrey » 2017-05-16 13:54:30

Тогда будь пацаном, реализуй модификацию RFC 5322 http://emailregex.com/ :evil:
Если ваша тема перенесена, то смотри viewtopic.php?f=1&t=32308

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1184
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Получить e-mail адрес из SOA-записи DNS

Непрочитанное сообщение xM » 2017-05-16 17:22:20

f_andrey писал(а):Источник цитаты Тогда будь пацаном, реализуй модификацию RFC 5322 http://emailregex.com/

Это не о том. Но ссылка хорошая, спасибо.
IT voodoo blog https://kostikov.co

zg
полковник
Сообщения: 5843
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Получить e-mail адрес из SOA-записи DNS

Непрочитанное сообщение zg » 2017-06-01 21:32:02

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

% echo "this\.my\.email.my.lovely.personal.domain." | sed 's/\\././g;s/\.$//'
this.my.email.my.lovely.personal.domain

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1184
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Получить e-mail адрес из SOA-записи DNS

Непрочитанное сообщение xM » 2017-06-01 23:01:44

zg, @ забыли.
IT voodoo blog https://kostikov.co

zg
полковник
Сообщения: 5843
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Получить e-mail адрес из SOA-записи DNS

Непрочитанное сообщение zg » 2017-06-02 6:40:07

ой, точно :smile:

ну тогда тут нужен перл, я не знать, как сед уметь ассершин

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

% echo "this\.my\.email.my.lovely.personal.domain." | perl -ne '~s/(?<!\\)\./@/; ~s/\.$//; ~s/\\\././g; print;'
this.my.email@my.lovely.personal.domain


UPD: хотя изначальный вариант тоже вполне красивый и рабочий, если его немного сократить

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

% echo "this\.my\.email.my.lovely.personal.domain." | sed 's/\\\./\\/g; s/\./@/; s/\\/\./g; s/.$//'
this.my.email@my.lovely.personal.domain

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1184
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Получить e-mail адрес из SOA-записи DNS

Непрочитанное сообщение xM » 2017-06-02 11:30:58

zg писал(а):Источник цитаты тут нужен перл

Скрипач не нужен.
zg писал(а):Источник цитаты изначальный вариант тоже вполне красивый и рабочий

Рабочий да. А эстетического удовлетворения, как раз, нет :-)
IT voodoo blog https://kostikov.co

zg
полковник
Сообщения: 5843
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Получить e-mail адрес из SOA-записи DNS

Непрочитанное сообщение zg » 2017-06-02 12:34:05

Эстетика это, конечно, да :smile: можно и так сделать

soaemail.php

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

#!/usr/bin/env php
<?php 

interface Filter 
{
    function filter($data);
}

class CompositeFilter implements Filter
{
    private $filters = [];
    
    function addFiter
(Filter $filter)
    {
        $this->filters[] = $filter;
    }
    
    function filter
($data)
    {
        foreach ($this->filters as $filter) {
            $data = $filter->filter($data);
        }
        
        return $data
;
    }
}

class SobakenFilter implements Filter
{
    function filter($data)
    {
        return preg_replace('~(?<!\\\\)\\.~', '@', $data, 1);
    }
}

class LastDotFilter implements Filter
{
    function filter($data)
    {
        return preg_replace('~\\.$~', '', $data);
    }
}

class StripSpacesFilter implements Filter
{
    function filter($data)
    {
        return trim($data);
    }
}

class StripSlashesFilter implements Filter
{
    function filter($data)
    {
        return stripslashes($data);
    }
}

class SoaEmailFilter extends CompositeFilter
{
    function __construct()
    {
        $this->addFiter(new StripSpacesFilter());
        $this->addFiter(new SobakenFilter());
        $this->addFiter(new LastDotFilter());
        $this->addFiter(new StripSlashesFilter());
    }
}

$filter = new SoaEmailFilter();

foreach (file('php://stdin') as $line) {
    echo $filter->filter($line), PHP_EOL;


Использование

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

% echo "this\.my\.email.my.lovely.personal.domain." | ./soaemail.php
this.my.email@my.lovely.personal.domain


Ещё можно каждый класс тестами покрыть, потом в композер и на гитхаб :-D красотищща :drinks:

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1184
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Получить e-mail адрес из SOA-записи DNS

Непрочитанное сообщение xM » 2017-06-02 12:56:46

zg писал(а):Источник цитаты #!/usr/bin/env php

И этот скрипач тоже не нужен. А так-то вариантов вагон. Возможно даже, что где-то есть даже какой-нибудь Perl или Python модуль для этого.
Но я привык не умножать сущности без нужды.
IT voodoo blog https://kostikov.co


Вернуться в «SHELL»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя