我有一个文件emails.txt
上的电子邮件列表,我如何收到以@gmail.com
结尾的电子邮件,以及不以{{1}结尾的电子邮件在两个不同的文件中,使用GREP或类似的东西
对于前。
@gmail.com
我需要两个不同的输出,如:
***emails.txt***
email_1@gmail.com
email_2@gmail.com
email_3@hotmail.com
email_4@example.com
和
***emails-gmail.txt***
email_1@gmail.com
email_2@gmail.com
答案 0 :(得分:1)
要获取包含“gmail.com”的电子邮件,请执行以下操作:
cat emails.txt | grep @gmail.com
要获取不包含'gmail.com'的电子邮件,请执行:
cat emails.txt | grep -v @gmail.com
答案 1 :(得分:1)
这样做不工作!!
您只能使用grep
,然后将STDOUT重定向到这样的文件:
来自@gmail.com
的邮件:
grep @gmail.com emails.txt > emails-gmail.txt
来自@gmail.com
grep -v @gmail.com emails.txt > emails-other.txt
-v
的作用是返回不包含@gmail.com
的行。
上述解决方案没有按预期工作,因为
grep
使用正则表达式,而在正则表达式中, dot.
表示匹配任何字符。我们可以使用替换grep
作为fgrep
或grep -F
,将参数作为文字字符串而不是正则表达式!然后它按预期工作。此外,您可以使用\.
转义正则表达式点。然后你可以再做一次
grep @gmail\.com emails.txt > emails-gmail.txt
答案 2 :(得分:1)
正确的方法是:
awk '{print > ("emails-" (/@gmail\.com$/ ? "gmail" : "other") ".txt")}' emails.txt
这将解析您的输入文件一次,生成两个输出文件,并将正确处理其他解决方案到目前为止发布的潜在错误匹配。