Извлечение электронных писем из текстового файла с помощью команды Grep в Linux
Предположим, у нас есть текстовый файл, который содержит много текста, и в этом текстовом файле присутствуют некоторые идентификаторы электронной почты, и нам нужно найти все идентификаторы электронной почты, присутствующие в этом текстовом файле. Итак, что мы можем сделать? Как мы можем найти все идентификаторы электронной почты, присутствующие в этом текстовом файле? Один из способов найти все идентификаторы электронной почты вручную, но это очень трудоемкий и скучный процесс. Другой вариант — воспользоваться командой grep Linux, чтобы найти все идентификаторы электронной почты в текстовых файлах.
Команда Grep в Linux
Команда Grep в Linux находит шаблон в строке или файле и печатает все строки или подстроки, соответствующие заданному шаблону. Шаблон, предоставленный команде grep, обычно известен как регулярное выражение. Общий синтаксис команды grep следующий:
$ grep <pattern> filepath/filename
Общий формат идентификаторов электронной почты
Чтобы написать регулярное выражение для предоставления команды grep, сначала нам нужно понять общий шаблон или формат идентификаторов электронной почты.
Общая форма идентификаторов электронной почты выглядит следующим образом:
<username>@<domain>.<address>
Идентификаторы электронной почты имели в основном 3 поля: имя пользователя, домен и адрес. Напишем регрессию для каждого поля.
Регулярное выражение для фильтрации идентификатора электронной почты
Теперь давайте напишем регулярное выражение для фильтрации идентификаторов электронной почты. Начнем с имени пользователя. Имя пользователя может содержать заглавные (AZ) и строчные (az) буквы, цифры (0–9) и специальные символы, такие как точка и дефисы подчеркивания. Таким образом, регулярное выражение для имени пользователя будет [a-zA-Z0-9._-]
Домен и адрес обычно содержат заглавные (AZ) и строчные (az) буквы. Таким образом, регулярное выражение для домена и адреса будет [a-zA-Z]
Теперь давайте объединим регулярное выражение полей идентификатора электронной почты и составим одно регулярное выражение для идентификаторов электронной почты». Мы можем комбинировать шаблоны, используя символы + . Таким образом, окончательное регулярное выражение будет таким:
[a-zA-Z0-9._-]+@[a-zA-Z]+.[a-zA-Z]+
Фильтрация идентификаторов электронной почты с помощью команды grep
У нас есть шаблон регулярного выражения. Мы можем использовать этот шаблон для печати всех идентификаторов электронной почты. Возьмем, к примеру, один текстовый файл.
This is sample text file. This file contains email IDs. example1@mail.com this is email ID of person 1. example2@mail.com this is email ID of person 2. example@gmail.com is email ID with Gmail domain. These are the email IDs.
Имя файла: emails_file.txt.
Давайте воспользуемся командой grep с регулярным выражением, которое мы создали для этого файла, и посмотрим на результат.
$ grep -e “[a-zA-Z0-9._-]+@[a-zA-Z]+.[a-zA-Z]+” emails_file.txt
-e option is used to mention the pattern to find the filter in the file.
Ниже приведен результат приведенной выше команды grep:
В результате приведенной выше команды мы видим, что идентификаторы электронной почты печатаются, но с идентификаторами электронной почты также печатается другой текст в соответствующей строке идентификаторов электронной почты.
Команда grep дает нам опцию -o для печати строки с единственным совпавшим шаблоном. Нам просто нужно использовать параметр -o с командой grep, чтобы получить строку, соответствующую заданному шаблону.
grep -oe “[a-zA-Z0-9._-]+@[a-zA-Z]+.[a-zA-Z]+” emails_file.txt
Ниже приведен результат выполнения вышеуказанной команды:
Теперь мы видим, что печатаются только идентификаторы электронной почты. Это тот результат, которого мы хотели.