removing empty lines from a pipe using sed removing empty lines from a pipe using sed unix unix

removing empty lines from a pipe using sed


Below sed command would remove all the empty lines.

sed '/^$/d' file

or

Below sed command would remove all the empty lines and also the lines having only spaces.

sed '/^[[:blank:]]*$/d' file

Add -i parameter to do an in-place edit.

sed -i '/^[[:blank:]]*$/d' file


The problem is the -Z flag of grep. It causes grep to terminate matched lines with a null character instead of a newline. This won't work well with sed, because sed processes input line by line, and it expects each line to be terminated by a newline. In your example grep doesn't emit any newline characters, so as far as sed is concerned, it receives a block of text without a terminating newline, so it processes it as a single line, and so the pattern /^\s*$/ doesn't match anything.

Furthermore, the -z flag would only make sense if the filenames in the output of find were terminated by null characters, that is with the -print0 flag. But you're not using that, so the -z flag in grep is pointless. And the -Z flag is pointless too, because that should be used when the next command in the pipeline expects null-terminated records, which is not your case.

Do like this:

find ~/AppData/Local/atom/ -name atom.sh -type f -print0 | grep -zF 'cli/atom.sh' | tr '\0' '\n' | tail -n 1


Not all sed's support the token \s for any whitespace character.

You can use the character class [[:blank:]] (for space or tab), or [[:space:]] (for any whitespace):

sed '/^[[:blank:]]*$/d'sed '/^[[:space:]]*$/d'