В командной строке Linux есть множество инструментов, которые мы можем использовать для извлечения информации из текстовых файлов.
В этом руководстве мы будем использовать несколько различных методов для извлечения адресов электронной почты из текстового файла на Linux.
Все методы преследуют одну и ту же цель, поэтому выберите тот, который покажется вам наиболее удобным.
Вывод email из текстового файла
Мы предполагаем, что ваш текстовый файл содержит один или несколько адресов электронной почты, разбросанных среди обычного текста.
Задача состоит в том, чтобы с помощью различных утилит Linux проверить текстовые файлы и извлечь из них адреса электронной почты.
Для примера мы используем следующий текстовый файл.
Имя: Ацкий Лук. Электронная почта: luka@example.com Для деловых запросов обращайтесь по адресу luka@example.net. В качестве альтернативы, отправляйте письма моему начальнику admin@example. Спасибо
Ознакомьтесь с различными методами, которые мы используем ниже для извлечения каждого из трех адресов электронной почты в этом примере файла.
Следующее регулярное выражение grep может быть использовано для извлечения адресов электронной почты из нашего файла.
$ grep -oe "[a-zA-Z0-9._]\+@[a-zA-Z]\+.[a-zA-Z]\+" emails.txt
Следующая команда sed также может быть использована для извлечения адресов электронной почты.
$ sed -r 's/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}/\n&\n/ig;s/(^|\n)[^@]*(\n|$)/\n/g;s/^\n|\n$//g;/^$/d' emails.txt
Следующий код на Python также можно использовать для извлечения адресов электронной почты из текста.
import re text = "Имя: Ацкий Лук. "+\ " Электронная почта: luka@example.com" "+\ " Для деловых запросов обращайтесь по адресу luka@example.net. "+\ "В качестве альтернативы, отправляйте письма моему начальнику admin@example."+\ Спасибо" emails = re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.[a-z]+", text) print (emails)
Сохраните ваш файл как script.py, а затем выполните его для извлечения адресов.
$ python3 script.py
Наконец, мы также можем использовать следующий скрипт на perl для извлечения адресов электронной почты.
#!/usr/bin/perl use strict; my $email_count; while (my $line = <>) { #read from file or STDIN foreach my $email (split /\s+/, $line) { if ( $email =~ /^[-\w.]+@([a-z0-9][a-z-0-9]+\.)+[a-z]{2,4}$/i ) { print $email . "\n"; $email_count++; } } } print "Emails Extracted: $email_count\n";
Сохраните файл как script.pl, а затем выполните его для извлечения адресов.
$ ./script.pl emails.txt
Заключение
В этом руководстве мы показали несколько различных методов извлечения адресов электронной почты из текстового файла в системах Linux.
Как обычно бывает с большинством вещей в Linux, существует несколько способов выполнения одной и той же задачи.
Используйте тот способ, который вам кажется наиболее удобным, будь то использование стандартных утилит Bash, языков программирования Python или Perl.