Прежде всего, регулярное выражение, которое соответствует всем действительным адресам электронной почты, является общеизвестно сложным .Учитывая данные теста, я предполагаю, что вы стремитесь к гораздо более простой концепции достоверности адреса электронной почты.
Одна проблема с вашим регулярным выражением состоит в том, что вы не соответствуете с самого началастрока, которая обозначена ^
.Это позволяет использовать недопустимые электронные письма, такие как письмо с амперсандом в имени пользователя, потому что оно просто соответствует всему после амперсанда.Поэтому, если мы добавим ^
, мы получим следующий вывод:
$ 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