sed - remove nul lines from file

Polytropon freebsd at edvax.de
Tue Nov 7 19:10:05 UTC 2017


On Tue, 7 Nov 2017 13:54:41 -0500, James B. Byrne wrote:
> 
> On Tue, November 7, 2017 13:36, Polytropon wrote:
> > On Tue, 7 Nov 2017 12:12:55 -0500, James B. Byrne via
> > freebsd-questions wrote:
> >> I have a data file created by an ancient proprietary scripting
> >> language called QTP.  There is a bug in this program which, on
> >> occasion, manifests itself by inserting output records consisting
> >> entirely of nul (^@) (\x00) bytes at regular intervals.  In the
> >> present case every 47th. record consists entirely of nuls.
> >
> ...
> > In this case, awk can also help:
> >
> > 	$ awk '(length > 0)' < infile.txt > outfile.txt
> >
> > This will print all lines which are longer than 0 characters.
> >
> 
> Thank you very much. This worked exactly as I required.
> 
> I infer from this that awk does not consider nul a character and its
> presence does not count towards the length of a record.  Which is
> counter intuitive to me.  A nul takes up the same space as any other
> character so why is it not counted?  I would not have tried this
> construction for that reason.

Even though this example was actually meant for empty lines,
i. e., those where the NULs have already been removed (for
example with the tr -d command), but it seems that awk does
actually ignores the NULs.

Let's say this is the test input:

	foo
	bar
	^@^@^@^@^@^@^@^@
	baz
	meow

When fed into the awk command mentioned above, the NULs are
magically removed:

	$ awk '(length > 0)' < nul.txt 
	foo
	bar
	baz
	meow

This is an interesting behaviour, but fits the current problem
quite well: It removes NULs and emoty lines. :-)





-- 
Polytropon
Magdeburg, Germany
Happy FreeBSD user since 4.0
Andra moi ennepe, Mousa, ...


More information about the freebsd-questions mailing list