Как удалить доменную часть каждой строки от текстового файла, содержащего адреса электронной почты

У меня есть текстовый файл с одним адресом электронной почты на строку. Как я могу удалить доменную часть, но не часть TLD каждой строки? В здесь, мы определили бы TLD, чтобы быть последним элементом строки после последнего точечного символа.

Другими словами, демонстрационный вход:

foobar@example.org
john.smith@hotmail.com
chunkylover69@mail.dk
qwerty@yahoo.co.uk

Желаемый вывод:

foobar@org
john.smith@com
chunkylover69@dk
qwerty@uk
5
задан 30 June 2015 в 21:48

3 ответа

$ sed 's/@.*[.]/@/' file
foobar@org
john.smith@com
chunkylover69@dk
qwerty@uk

regex @.*[.] получает все от @ до прошлый период . на строке. Мы заменяем это @.

7
ответ дан 23 November 2019 в 08:51

Используя perl

perl -pe 's/(@).*\.(.*)$/\1\2/' foo

или встроенный

perl -i -pe 's/(@).*\.(.*)$/\1\2/' foo
<час>

Пример

$ cat foo
foobar@example.org
john.smith@hotmail.com
chunkylover69@mail.dk
qwerty@yahoo.co.uk

$ perl -pe 's/(@).*\.(.*)$/\1\2/' foo
foobar@org
john.smith@com
chunkylover69@dk
qwerty@uk
<час>

объяснение RegEx

/(@).*\.(.*)$/

  • 1-я Группа фиксации (@)

    @ соответствия символ @ буквально

  • .* соответствия любой символ (кроме новой строки)

    Квантор: * Между нулевыми и неограниченными временами, максимально много раз, отдавая по мере необходимости [жадный]

    \. соответствия символ . буквально

  • 2-я Группа фиксации (.*)

    .* соответствия любой символ (кроме новой строки)

    Квантор: * Между нулевыми и неограниченными временами, максимально много раз, отдавая по мере необходимости [жадный]

  • $ утверждают положение в конце строки

Regular expression visualization

Демонстрация Debuggex

2
ответ дан 23 November 2019 в 08:51

Используя awk можно сделать это этот путь

$awk '{ sub(/\@.*\./,"@"); print }' file


foobar@org
john.smith@com
chunkylover69@dk
qwerty@uk

Используя sub, Замена (находит и заменяет), можно искать шаблон и замену.

1
ответ дан 23 November 2019 в 08:51

Другие вопросы по тегам:

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