Страница 1 из 1
Получить e-mail адрес из SOA-записи DNS
Добавлено: 2017-05-01 19:33:55
xM
Ситуация следующая. В 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
Наверняка есть вариант покрасивее.
Получить e-mail адрес из SOA-записи DNS
Добавлено: 2017-05-15 9:49:20
Alex Keda
чего некрасиво-то?
работает - и хай работает
Получить e-mail адрес из SOA-записи DNS
Добавлено: 2017-05-16 12:16:35
xM
Alex Keda писал(а): чего некрасиво-то?
Нет чувства удовлетворённости :-)
Получить e-mail адрес из SOA-записи DNS
Добавлено: 2017-05-16 13:54:30
f_andrey
Тогда будь пацаном, реализуй модификацию RFC 5322
http://emailregex.com/ 
Получить e-mail адрес из SOA-записи DNS
Добавлено: 2017-05-16 17:22:20
xM
Это не о том. Но ссылка хорошая, спасибо.
Получить e-mail адрес из SOA-записи DNS
Добавлено: 2017-06-01 21:32:02
zg
Код: Выделить всё
% echo "this\.my\.email.my.lovely.personal.domain." | sed 's/\\././g;s/\.$//'
this.my.email.my.lovely.personal.domain
Получить e-mail адрес из SOA-записи DNS
Добавлено: 2017-06-01 23:01:44
xM
zg, @ забыли.
Получить e-mail адрес из SOA-записи DNS
Добавлено: 2017-06-02 6:40:07
zg
ой, точно
ну тогда тут нужен перл, я не знать, как сед уметь ассершин
Код: Выделить всё
% 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
Получить e-mail адрес из SOA-записи DNS
Добавлено: 2017-06-02 11:30:58
xM
zg писал(а): тут нужен перл
Скрипач не нужен.
zg писал(а): изначальный вариант тоже вполне красивый и рабочий
Рабочий да. А эстетического удовлетворения, как раз, нет :-)
Получить e-mail адрес из SOA-записи DNS
Добавлено: 2017-06-02 12:34:05
zg
Эстетика это, конечно, да

можно и так сделать
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
Ещё можно каждый класс тестами покрыть, потом в композер и на гитхаб

красотищща

Получить e-mail адрес из SOA-записи DNS
Добавлено: 2017-06-02 12:56:46
xM
zg писал(а): #!/usr/bin/env php
И этот скрипач тоже не нужен. А так-то вариантов вагон. Возможно даже, что где-то есть даже какой-нибудь Perl или Python модуль для этого.
Но я привык не умножать сущности без нужды.