Почему эта команда sed не производит уникальные домены?

Я попытался извлечь уникальные домены из списка электронных писем, сохраненных в папке. Я попробовал следующее sed команда:
Данный вход был читаем мне как электронные письма в файле.

sed 's/^.*@//g' "180 Millions Emails Data 1"/* | sort -u > OutPutUniqueDomain2.txt

Вывод - что-то вроде этого:

®_18casper???!!!!!!!®@yahoo.com
®_18casper®@yahoo.com
§Ú°Û±o€£°÷°Ê€H§A§OœK¬Ü@home.com
³·³·---ŠÜ€ÖÁÙŠ³§A@hotmail.com
§AŠn¶Ü@hotmail.com
³aªoºÐ@hotmail.com
aol.com
Aol.com
Aol.Com
AOl.com
AOL.com

Ожидаемый Вывод:

yahoo.com
home.com
hotmail.com
aol.com

Я ожидаю иметь только уникальные домены в своем выводе. Я не знаю, питается ли входной файл правильно все еще, подобные неизвестные charcters появляются в файле, и даже домен не извлечен. Они появляются как электронное письмо. Также домен не уникален. Что неправильно я сделал с командой?

0
задан 31 January 2017 в 03:20

1 ответ

Большое спасибо @zwets для идентификации кодирования выпускает и фиксирует. Странные символы должны быть уничтожены путем выполнения любого

iconv -f ISO-8859-2 -t UTF-8 file | sed -r 's/\r//; s/.*@([^@]+)$/\L\1/' | sort -u > output

(На основе комментариев в чате)

Объяснение sed команда:

  • .*([^@]+)$ сохраняют символы, которые не являются @ в конце строки
  • \L нижний регистр все
  • \1 сохраненная часть от более раннего
3
ответ дан 7 November 2019 в 01:55

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

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