【问题标题】:Using grep cmd to filter使用 grep 命令过滤
【发布时间】:2016-09-07 01:42:45
【问题描述】:

使用 grep 或 egrep

有多少电子邮件地址采用“first.last”名称格式并涉及某人 谁的名字以字母表的前半部分的字母开头? (我要数数)

testingfile.txt 的摘录

glorious@uole.com
hhhhhh
ItzStatic
jackass
The_Epic_Turtle
david.webb@cia.gov
overthemoon34
smiley362
emilio
rico@uole.com
ddc44ever
check.it@geocities.com
dickens@uole.com
middle614
IntegrityJeff
5432
jdm-mojo@geocities.com
zack.gertrude@gmail.com

为此,我想过滤每一行以检查它是否有“@”并检查第一个字母以查看它是 A-M 还是 a-m,并检查它是否有句点。

grep -c "@" testingfile.txt

grep -c "\." testingfile.txt(尽管这仅检查该行中是否出现 1 次。)

grep -c "[a-mA-M]" testingfile.txt(还没有让这个工作)

如何将这 3 个语句组合在一起,以及如何检查每行的第一个字符是 a-m 还是 A-M 之间的字母?

【问题讨论】:

  • 两个选项:1)正则表达式(尝试Regexr构建查询)2)使用管道|并一个接一个地放置greps
  • @the.Legend 我将使用管道。会是这样吗? grep -c "@" | grep -c "\." testingfile.txt 另外,我怎样才能让第三个工作?

标签: linux unix grep


【解决方案1】:

查找以 [a-mA-Z] 开头的电子邮件地址

因为你对一行多封邮件的问题感兴趣,让我们考虑一下这个测试文件:

$ cat testingfile.txt 
glorious@uole.com
hhhhhh
david.webb@cia.gov overthemoon34 rico@uole.com
Check.it@geocities.com dickens@uole.com
IntegrityJeff
5432
jdm-mojo@geocities.com
zack.gertrude@gmail.com

这显示了首字母在字母表前半部分的所有匹配电子邮件地址的前半部分:

$ grep -o "\b[a-mA-M][^[:blank:]]*@" testingfile.txt 
glorious@
david.webb@
Check.it@
dickens@
jdm-mojo@
gertrude@

这很重要:

$ grep -o "\b[a-mA-M][^[:blank:]]*@" testingfile.txt | wc -l
6

对“名字”更严格

如果我们想将匹配限制为名称部分包含句点的电子邮件地址:

$ grep -o "\b[a-mA-M][^[:blank:]]*\.[^[:blank:]]*@" testingfile.txt 
david.webb@
Check.it@

并计算它们:

$ grep -o "\b[a-mA-M][^[:blank:]]*\.[^[:blank:]]*@" testingfile.txt | wc -l
2

注意事项

  1. 这里使用的正则表达式\b[a-mA-M][^[:blank:]]*@ 非常简单。存在可以准确选择真实电子邮件地址的正则表达式,但它们非常复杂。

  2. grep -c 计算行数。我们首先必须使用grep -o 将每个匹配项放在单独的行上,然后使用wc -l 来计算行数。

  3. 正则表达式 [a-mA-M] 不是 unicode 安全的。

【讨论】:

    【解决方案2】:

    你可以使用:

     grep "^[a-mA-M].*\..*@" testingfile.txt
    

    这将搜索以字母表的前半部分开头的字符串 (^[a-mA-M].*) 然后,在某些时候包含一个句点 (.*\.),然后在稍后的某个时候有一个 @: ( .*@)。

    【讨论】:

      猜你喜欢
      • 2021-09-14
      • 1970-01-01
      • 2018-03-01
      • 2020-01-04
      • 1970-01-01
      • 2014-11-02
      • 2015-04-27
      • 2013-04-28
      • 2015-08-17
      相关资源
      最近更新 更多