Как сопоставить несколько почтовых адресов E -с помощью регулярного выражения в Linux?

Вы можете сделать все, что нижеawk:

awk -F'(: *|[)(])' '
    /^ *Type/     { type=type==""?$2 : type ";" $2 }
    /^ *Retention/{ Retention=Retention==""?$3 : Retention ";" $3}
    /^ *Wednesday/{ gsub(/ +Wednesday/,"",$0); day=day==""?$0 : day ";" $0}
END{ print type, Retention, day }' OFS=, infile

Возможно, вам придется скорректировать части условия /... /, чтобы они более точно соответствовали значениям вашего поля.

Вывод такой, какой вы хотели.

0
12.04.2021, 10:50
2 ответа

Вы можете использовать следующее регулярное выражение:

.*@island\.ac\.kr$

Пример:

$ cat /tmp/111
Tom.riddle@island.ac.kr
Ron_Weasley@island.ac.kr
harry2020@island.ac.kr
itai@gmail.com
what.ever@island.ac.kr
abc@what.ac.kr
$ grep '.*@island\.ac\.kr$' /tmp/111
Tom.riddle@island.ac.kr
Ron_Weasley@island.ac.kr
harry2020@island.ac.kr
what.ever@island.ac.kr

Точки после знака @необходимо экранировать.

2
28.04.2021, 22:53

Используя awkи предполагая, что ввод состоит из одного адреса электронной почты в строке.

awk -F @ 'tolower($NF) == "island.ac.kr"' input.txt

или, если вы хотите всегда выводить нижний регистр -,

awk -F @ 'tolower($NF) == "island.ac.kr" { print tolower($0) }' input.txt

При этом каждая строка рассматривается как набор@-полей с разделителями. Когда последнее поле ($NF), преобразованное во все строчные буквы -, точно равно island.ac.kr, строка печатается.

Тестирование:

$ cat input.txt
Tom.riddle@island.ac.kr
Ron_Weasley@island.ac.kr
harry2020@island.ac.kr
itai@gmail.com
what.ever@island.ac.kr
abc@what.ac.kr
example@island.ac.kr.com
$ awk -F @ 'tolower($NF) == "island.ac.kr"' input.txt
Tom.riddle@island.ac.kr
Ron_Weasley@island.ac.kr
harry2020@island.ac.kr
what.ever@island.ac.kr

Если вы хотите также сопоставлять адреса типа name@something.island.ac.kr, вы можете использовать awkвот так:

awk -F @ 'tolower($NF) ~ /island\.ac\.kr$/'

Или, с grepи tr,

tr '[:upper:]' '[:lower:]' <input.txt | grep 'island\.ac\.kr$'

, где trиспользуется для перевода всех символов в нижний -регистр, а grepзатем используется для выбора соответствующих строк.

Или просто

grep -i 'island\.ac\.kr$' input.txt

если вы не возражаете против возможного вывода в смешанном регистре.

0
28.04.2021, 22:53

Теги

Похожие вопросы