如何用for循环遍历egrep输出的可能为空的行并统计空行数?
解决空行统计与打印问题
原命令的问题分析
你的命令没有输出是两个核心问题导致的:
- 正则表达式错误:匹配空行的正确正则是
^$(行首直接衔接行尾,无任何字符),你写的$^是无效表达式,根本匹配不到任何内容。 - 命令替换的特性限制:
$(egrep ...)会把命令输出按空白符(包括换行)分割成字段,空行本身没有内容,因此不会生成循环变量,for循环根本不会执行。
直接统计空行数量的最简方法
使用egrep自带的计数参数-c,可以直接返回匹配到的空行数量:
egrep -c '^$' txtfile
如果需要把仅含空白字符(空格、制表符)的行也视为空行统计,用以下命令:
egrep -c '^[[:space:]]*$' txtfile
同时打印空行并统计数量
如果需要既打印空行又查看总数,有两种简便实现方式:
- 用
tee中转输出:将空行输出到终端的同时写入临时文件,再统计临时文件的行数:
egrep '^$' txtfile | tee /tmp/empty_lines && wc -l /tmp/empty_lines
- 用
awk一站式处理:在打印空行的同时完成计数,最后输出总数:
awk '/^$/{print; count++} END{print "空行总数:" count}' txtfile
内容的提问来源于stack exchange,提问作者Divine
相关产品推荐
相关产品推荐

