为什么这个 sed 命令没有产生唯一的域?

为什么这个 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
³·³·---ŠÜ€ÖÁÙŠ³§[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之前保存的部分

相关内容