1

Содержание файла:

17541   From Email      subscription@test.com      Inbound
Policy Manager  Envelope Analysis
Profiler
17541   From Email      subscription@yahoo.com      Inbound
Policy Manager  Envelope Analysis
Profiler
17541   From Domain      test.co.uk      Inbound
Policy Manager  Envelope Analysis
Profiler
17541   From Domain      yahoo.co.uk      Inbound
Policy Manager  Envelope Analysis
Profiler
17541   From Email      subscription@test.com      Inbound
Policy Manager  Envelope Analysis
Profiler

Я использую эту команду для извлечения писем и преобразования их в новый формат, но я не могу извлечь домены. Я использую "sort -u", потому что некоторые письма дублируются в файле.

cat 1| grep -E -o "\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b"|sed -e 's/^/E,/'|sort -u

Ожидаемый вид после доменов grep:

test.co.uk
yahoo.co.uk

2 ответа2

1

Этот awk one-liner дает желаемый результат

awk '/From Email/ { if( !match($4,"@") ){ print $4 } }' inputfile

Он выбирает строки, содержащие «From Email», и проверяет, содержит ли четвертый столбец символ @. Вы можете использовать match с регулярными выражениями, чтобы сопоставить его с доменом, а не с адресом электронной почты, если хотите.

0

Ваше выражение grep в порядке, это sed, которое не работает, измените его на:

< 1 grep -Eo '\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b' | sed -e 's/[^@]*@//' | sort -u

Предполагая, что входной файл называется 1 . Вы также можете сделать все это с помощью grep:

< 1 grep -Eo '\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b' | grep -Eo '[^@]+$' | sort -u

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .