How to remove blank lines from a file (including tab and spaces)?
Just grep
for non-blanks:
grep '[^[:blank:]]' < file.in > file.out
[:blank:]
, inside character ranges ([...]
), is called a POSIX character class. There are a few like [:alpha:]
, [:digit:]
... [:blank:]
matches horizontal white space (in the POSIX locale, that's space and tab, but in other locales there could be more, like all the Unicode horizontal spacing characters in UTF8 locales) while [[:space:]]
matches horizontal and vertical white space characters (same as [:blank:]
plus things like vertical tab, form feed...).
grep '[:blank:]'
Would return the lines that contain any of the characters, :
, b
, l
, a
, n
or k
. Character classes are only recognised within [...]
, and ^
within [...]
negates the set. So [^[:blank:]]
means any character but the blank ones.
Here is an awk
solution:
$ awk NF file
With awk
, NF
only set on non-blank lines. When this condition match, awk
default action that is print
will print the whole line.
How about:
sed -e 's/^[[:blank:]]*$//' source_file > newfile
or
sed -e '/^[[:blank:]]*$/d' source_file > newfile
i.e.
For each line, substitute:
- if it starts ("
^
") - with spaces or tabs ("
[[:blank:]]
") zero or more times ("*
") - and then is the end of the line ("
$
")
More info on ::blank:: and other special characters at http://www.zytrax.com/tech/web/regex.htm#special