使用grep或egrep
有多少个电子邮件地址采用'first.last'名称格式且涉及到某人 谁的名字以字母表前半部分的字母开头? (我想得到点数)
testfile.txt的摘录
my-command XXX # to display the result
echo "Number :" $(my-command XXX | wc -l) # to display the number of lines
要做到这一点,我想过滤每一行以检查它是否有" @"检查第一个字母是否是A-M或a-m,并检查它是否有句号。
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
grep -c "@" testingfile.txt
(虽然这只检查行中是否有1次出现。)
grep -c "\." testingfile.txt
(仍然无法让这个工作)
如何将3个语句组合在一起,如何检查每行的第一个字符是否是a-m或A-M之间的字母?
答案 0 :(得分:1)
因为你对一行上有多个电子邮件的问题感兴趣,让我们考虑一下这个测试文件:
$ 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-safe。
答案 1 :(得分:0)
您可以使用:
grep "^[a-mA-M].*\..*@" testingfile.txt
这将搜索一个以字母表的前半部分开始的字符串(^[a-mA-M].*
)然后,在某个时刻包含一个句点(.*\.
),然后在某个时刻后面会有{ {1}} :( @
)。