Recently I had a need to count the number of empty lines in a text file. After some digging into the man
pages of grep
I was able to come up with a one liner which was able to do it.
Following my tradition of documenting one liners, I am going to document this one as well
Assumption
By empty line, I mean any line which either has no characters or has only whitespace (space, tab) characters.
Command
For the impatient in you, here is the actual command.
grep -cv -P '\S' filename |
Explanation
-P '\S'
– This selects all lines that have a non whitespace character-c
– Print the count of matching lines-v
– Select only the non-matching lines
So, we are first matching all lines that have a non whitespace character and then use -v
option to ignore them and then -c
option to print the count instead of the actual line.
If we wanted the count of all non-empty lines, then we just have to remove the -v
option from the above command.
grep -c -P '\S' filename |
Hope this is helpful. Happy Grep’ing
Hey Sudar,
The notification mail of this post had the command completely stripped off.
Thanks for reporting this. Can you kindly forward the mail to me. I am using feedburner and I think it is getting into some issues.
May be time to replace it with a custom solution.
Like anand said above, the subscription mail stripped off the one-liner command.
BTW, why not `grep -c -e ‘^\s*$’ filename` ?
-c for counting the number of matches
-e to let grep know that a regular expression follows
The literal meaning of regular expression used in the above solution is “to match if a start of line, following by a whitespace or tab for any number of times, including zero times, followed by the end of line”.
Also, which version of grep you use? On a mac with BSD grep (2.5.1-FreeBSD), the ‘-P’ is not implemented. In Ubuntu with GNU grep (2.10), your solution works, though.
Kindly forward the email. I will have a look at it. Not sure why it is getting stripped.
There is absolutely no reason to not use it. It is just that I found the other one first
I am using 2.5.1 (GNU grep) in Mac Lion. `-P` works for me, but I guess I would have upgraded to GnU grep sometime back.
Done.
Also forwarded another issue with the comment subscription via another email (the email that I use for comment subscription is different from the email used for blog subscription).