Используйте скрипт Sed для печати только действительных записей - PullRequest
0 голосов
/ 27 ноября 2018

emaillist.txt

1. Saman.desilva@tamucc.edu
2. saman_desilva@tamucc.edu
3. saman&desilva@tamucc.edu
4. Saman.desilva@gmail.com
5. saman@desilva@yahoo.com
6. saman@mail@com
7. saman.desilva@yahoo com

Я хочу напечатать действительные адреса электронной почты, но у меня возникли проблемы с решением этой проблемы.Пока у меня есть этот скрипт, но он не выводит полностью правильный вывод.Это все еще дает мне неправильный вывод.

sed -nr '/\w+@\w+\.\w+$/p' emaillist.txt

Вывод:

saman.desilva@tamucc.edu 
saman_desilva@tamucc.edu
saman&desilva@tamucc.edu 
Saman.desilva@gmail.com
saman@desilva@yahoo.com

1 Ответ

0 голосов
/ 27 ноября 2018

Прежде всего, регулярное выражение, которое соответствует всем действительным адресам электронной почты, является общеизвестно сложным .Учитывая данные теста, я предполагаю, что вы стремитесь к гораздо более простой концепции достоверности адреса электронной почты.

Одна проблема с вашим регулярным выражением состоит в том, что вы не соответствуете с самого началастрока, которая обозначена ^.Это позволяет использовать недопустимые электронные письма, такие как письмо с амперсандом в имени пользователя, потому что оно просто соответствует всему после амперсанда.Поэтому, если мы добавим ^, мы получим следующий вывод:

$ sed -nr '/^\w+@\w+\.\w+$/p' emaillist.txt
saman_desilva@tamucc.edu

Ну, это тоже не правильно, и теперь проблема в том, что \w only представляет любую букву, номер или подчеркивание.Точки - это другой «действительный» не буквенно-цифровой символ для имен пользователей в ваших тестовых данных, поэтому нам также нужно настроить ваш шаблон, чтобы добавить его, и теперь мы получаем правильный вывод:

$ sed -nr '/^(\w|\.)+@\w+\.\w+$/p' emaillist.txt
Saman.desilva@tamucc.edu
saman_desilva@tamucc.edu
Saman.desilva@gmail.com
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...