gpt4 book ai didi

linux - 使用 grep 命令按首字母、@ 和 "."进行过滤

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:48:09 25 4
gpt4 key购买 nike

我有一个包含许多电子邮件地址和随机文本的文件 (testdata.txt)。使用 grep 命令:

我想确保它们是电子邮件地址而不是文本,所以我想过滤掉它们以便只包含带有“@”的行。

我还想过滤掉它们,以便只显示以字母 A-M 或 a-m 开头的电子邮件地址,并用句点分隔名字和姓氏。

例如。 john.doe@gmail.com但是,将包括 johndoe@gmail.com。

最后,我想统计所有符合这些规则的电子邮件地址。

到目前为止,我只能通过执行以下操作来确保它们是电子邮件地址

grep -c "@" testdata.txt

.

我还想使用 grep cmd 检查有多少电子邮件地址具有政府域(“gov”)。

我想检查它是否在该行中有一个 @ 符号并且它还包含 gov。但是,当我执行以下任一操作时,我没有得到我想要的答案。

grep -c "@\|gov" testdata.txt   I get the amount of lines that have a @ not @ and gov
grep -c "@/|gov" testdata.txt I get 0
grep -c "@|gov" testdata.txt I get 0

最佳答案

自下而上地回答你的问题。

您正在以 基本正则表达式 模式使用 grep。在这种模式下,\|表示OR|表示符号|/| 表示符号 /|.

如果您在 .gov 域中查找电子邮件,您可能会查找以 @ 开头,后跟互联网域名中允许的符号和 .gov,或 .GOV,或 .Gov

借自another post on this site你最终会得到类似的东西

   grep -c "@[A-Za-z0-9][A-Za-z0-9.-]*\.\(gov\|Gov\|GOV\)"

跳过顶级域的另外 5 个可能的拼写,例如政府。但是我会使用 -i 开关,这意味着忽略大小写 来简化表达式

   grep -ci "@[a-z0-9][a-z0-9.-]*\.gov"

现在您对使用点分隔名称的各个部分不是很清楚:

I also want to filter them out so that only email addresses that start with the letter A-M or a-m are shown and have a period separating the first name and last name. Eg. john.doe@gmail.com However, johndoe@gmail.com would be included.

所以我不会碰这部分。

最后,您可以使用范围表达式 来过滤以字母A-M

开头的地址
   grep -ci "[a-m][a-z0-9._%+-]*@[a-z0-9][a-z0-9.-]*\.gov"

请注意,这不是 Internet 消息格式 RFC 5322 address specification 的实现。但只是一个主要用于教学目的的近似值。切勿在生产代码中留下不完全合规的实现。

关于linux - 使用 grep 命令按首字母、@ 和 "."进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39341161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com