我尝试从文件夹中存储的电子邮件列表中提取唯一域。我尝试了以下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
³·³·---ŠÜ€ÖÁÙŠ³§[email protected]
§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
我希望输出中只有唯一的域。我不知道即使输入文件正确输入,文件中仍会出现这些类型的未知字符,甚至域也未提取。它们看起来像电子邮件。而且域不是唯一的。我对命令做错了什么?
答案1
非常感谢 @zwets 识别编码问题并进行修复。可以通过以下任一方式销毁奇怪的符号
iconv -f ISO-8859-2 -t UTF-8 file | sed -r 's/\r//; s/.*@([^@]+)$/\L\1/' | sort -u > output
(根据您在聊天中的评论)
命令解释sed
:
.*([^@]+)$
@
保存不在行尾的字符\L
全部小写\1
之前保存的部分