使用“grep”匹配文件中的空行

31

为什么会

grep -c '^\n' myfile.txt

如果文件中存在空行,需要返回return 0吗?

如果有空行,它是以新的一行开始的,对吗?

如果我理解有误,请纠正我。

3个回答

52

匹配行尾的正则表达式是$,而不是\n(因为grep逐行处理,会忽略行之间的换行符)。

grep -c '^$' myfile.txt

好的,明白了。我不知道grep会忽略行之间的换行符。谢谢!! - Bhargav Ponnapalli
4
确切地说,“$”是匹配字符串结尾的正则表达式元字符,而不是行尾。grep命令只是将输入的每一行视为单独的字符串进行处理,因此在grep中,每个字符串的结尾($)都出现在行的结尾处,但其他工具的行为不同。然而,在所有工具中,“$”始终表示“字符串的结尾”。 - Ed Morton
1
在无法有多行的情况下,EOL和EOS是等效的。任何一次只处理一行的处理都属于这种情况。 - Barmar
@Barmar 我理解你的想法,我只是在回应“正则表达式匹配行尾是$”和“grep ...忽略行之间的换行符”这些语句,我觉得这些语句很容易被误解。 - Ed Morton
小心,-o grep 选项会忽略空行。 - Artfaith
显示剩余3条评论

10

使用grep命令统计空白行的数量,命令如下:

grep -c "^$" myfile.txt

由于\n被视为行尾,你需要使用行首和行尾"^$"


0

其他带有-c的答案是正确的。

如果您想查看文件中空行的编号:

grep -n '^$' myfile.txt

例如:

grep -n '^$' /usr/share/wordlists/rockyou.txt
4751:
34329:
50383:
99361:
154363:
231236:
562997:
2459758:
14344383:
14344384:
14344385:

(如果你想删除它们:sed -i '/^$/d' myfile.txt)

:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接