У меня есть текстовый файл с одним адресом электронной почты на строку. Как я могу удалить доменную часть, но не часть 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
$ sed 's/@.*[.]/@/' file
foobar@org
john.smith@com
chunkylover69@dk
qwerty@uk
regex @.*[.]
получает все от @
до прошлый период .
на строке. Мы заменяем это @
.
Используя 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-я Группа фиксации (.*
)
.*
соответствия любой символ (кроме новой строки)
Квантор: *
Между нулевыми и неограниченными временами, максимально много раз, отдавая по мере необходимости [жадный]
$
утверждают положение в конце строки
Используя awk
можно сделать это этот путь
$awk '{ sub(/\@.*\./,"@"); print }' file
foobar@org
john.smith@com
chunkylover69@dk
qwerty@uk
Используя sub
, Замена (находит и заменяет), можно искать шаблон и замену.