Regex 用只包含数字或-或的电子邮件清理电子邮件列表。在@符号前面

Regex 用只包含数字或-或的电子邮件清理电子邮件列表。在@符号前面,regex,bash,sed,Regex,Bash,Sed,我有一个我正在清理的电子邮件地址列表。其中相当一部分只包含@符号前面的数字,或者只包含由字母分隔的数字。性格 例如: 100050。3555@domainname.com 我在以下方面遇到了困难: sed-e'/^\d+\./d'文件>临时文件和mv临时文件 或 sed-e'/^\d+/d'文件>临时文件(&mv)临时文件 或 sed-e'/^\d+\.+/'文件>临时文件(&mv)临时文件 或 sed-e'/^\[0-9]+\.+/d'文件>临时和mv临时文件 这些命令都没有删除数据 通常我可

我有一个我正在清理的电子邮件地址列表。其中相当一部分只包含@符号前面的数字,或者只包含由字母分隔的数字。性格

例如:

100050。3555@domainname.com

我在以下方面遇到了困难:

sed-e'/^\d+\./d'文件>临时文件和mv临时文件

sed-e'/^\d+/d'文件>临时文件(&mv)临时文件

sed-e'/^\d+\.+/'文件>临时文件(&mv)临时文件

sed-e'/^\[0-9]+\.+/d'文件>临时和mv临时文件

这些命令都没有删除数据

通常我可以用

egrep-c[任何字符或字符串]文件

而且,如果egrep可以检测到它并提供一个计数,那么我可以放心地执行一个命令。当我使用:

egrep-c[^\/d+@]文件

这显示了0个结果。但是,文件中还有很多

egrep-c[\/d+@]文件

这似乎显示了所有的电子邮件地址,甚至那些没有数字的

我还需要帮助过滤电子邮件,如:

1.0.7@text.text.text.com 1.0.7@text.text.text.com 1-gemini@text.com 1-gemini@text.com 1-2-3@numbersonly.net 0fxu00001wtx1a@text.com 0f31e5c394dad311b60c00e029101a0704101166@text.text.text.com 0f.@numbersonly.net 0d07mtouk50ao0cusrn8soq7cfdb33v5fn@4ac.com 0_0100@text.com 099ridge@text.text.text.za
请帮忙。谢谢大家!

此命令应能工作:

sed -e '/^[0-9.]*@/d' file
如果要就地更改文件,请添加-i参数,而不是创建临时文件

以前的命令不起作用的原因是语法问题。默认情况下,sed对模式使用BRE基本正则表达式语法。此语法不处理\d速记字符类或+量词。

您也可以使用egrep-v:


-v、 -反转匹配->>选择不匹配的行

sed需要\+反斜杠,除非使用sed-r。GNU sed理解\d,但其他sed可能不会@glennjackman GNU sed不理解\d。GNU sed确实理解\w、\w、\s、\b和\b来命名一些感谢您!我正在测试它,因为我们说话。我需要一些帮助与其他类型的明显虚假的电子邮件地址,如我后来编辑,并在我的问题中列出。你也能帮我一个命令吗?GNU sed理解\+和\?BRE和+和?只有POSIX标准吗???谢谢!关于我需要从这个脏名单中筛选出的其他类型的电子邮件地址,有什么想法吗?我想你必须构建几个自定义的过滤器,因为你发布的一些电子邮件实际上是有效的电子邮件。这是正确的。如果您能帮助使用这些过滤器中的任何一个,请按照我们的要求去做。我只是想减轻我的DNS和SMTP引擎验证程序的负担,并最终减轻我的主机负载。非常感谢。例如,对于电子邮件地址,如199608202329。qaa08476@word-word.word.word.com,特别是@之前的部分,我想我应该使用:>'egrep-e-I-v'^[:digit::\.\w[:digit::::*@'file>temp&&mv temp file'
egrep -v "^[0-9\\.]+@" spamlist.txt