Ubuntu系统下如何统计日志文件中以a/A开头的单词数量
嗨,我来帮你搞定这个问题!你原来的命令出错是因为误用了shell的||逻辑或——这不是egrep正则表达式里的语法,shell会把'^a.*$'当成一个独立的命令去执行,自然跑不起来。下面给你几个靠谱的实现方案,分两种场景说明:
场景1:统计日志中以a/A开头的行的数量
如果你的需求是统计有多少行是以大写A或小写a开头的,那有两种简洁的写法:
写法一:用正则字符类匹配开头
egrep '^[Aa]' sortlist | wc -l
这里^[Aa]是正则表达式,^表示行的开头,[Aa]表示匹配A或者a任意一个字符,后面的.*其实可以省略,因为我们只关心开头的字符,不管后面内容是什么。
写法二:用忽略大小写选项简化正则
egrep -i '^a' sortlist | wc -l
-i是egrep的忽略大小写选项,这样^a会同时匹配以a和A开头的行,命令更简洁。
场景2:统计日志中以a/A开头的单词的数量
如果你的真实需求是统计所有以a/A开头的单词总数(而不是行数,毕竟一行可能有多个符合条件的单词),那需要先把日志里的单词拆分成每行一个,再过滤统计:
tr -cs '[:alpha:]' '\n' < sortlist | egrep -i '^a' | wc -l
tr -cs '[:alpha:]' '\n':把所有非字母的字符替换成换行符,同时压缩连续的分隔符,这样每个单词单独占一行egrep -i '^a':过滤出以a/A开头的单词行wc -l:统计这些行的数量,也就是符合条件的单词总数
你可以根据自己的实际需求选对应的命令,亲测在Ubuntu下完全可行~
内容的提问来源于stack exchange,提问作者Divyanshu mehta
相关产品推荐
相关产品推荐

