使用 grep 或 egrep
有多少电子邮件地址采用“名.姓”格式并涉及某人 谁的名字以字母表前半部分的字母开头? (我想得到计数)
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 之间的字母?
最佳答案
查找以 [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
注意事项
此处使用的正则表达式
\b[a-mA-M][^[:blank:]]*@
非常简单。存在可以准确选择真实电子邮件地址的正则表达式,但它们非常复杂。grep -c
计算行数。我们首先必须使用grep -o
将每个匹配项放在单独的行中,然后使用wc -l
计算行数。正则表达式
[a-mA-M]
不是 unicode 安全的。
关于linux - 使用grep命令过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39354393/