LINUX.ORG.RU

Вопрос по grep

 ,


0

1

Данное выражение выбирает из файлов в директории все email адреса.

grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,8}\b" * -h
Проблема: это выражение устроило бы меня, если бы не пропускало адреса с несколькими точками вида:
test@sale..department.company-name.com

Следующий рецепт, указанный здесь не получилось заставить работать:

«I removed the dot from the character class and instead repeated the character class and the following literal dot. E.g.

\b[A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}\b
will match john@server.department.company.com but not john@aol...com.»

Вопрос:

1. Как исключить адреса с 2-мя точками?
2. Верно ли второе выражение (по ссылке?)

Deleted

Убери ?: должно заработать.

anonymous
()

Есть хороший метод: вместо того, чтобы городить одно монстроидальное выражение, охватывающее все требуемые случаи, проще написать несколько простых выражений, и применить их последовательно.

В вашем случае надо отфильтровать сначала адреса с двумя точками, а потом остальное.

akk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.