Josef Lowder wrote:
> The following script used to work on my old unix system,
> to remove blank lines from a text file. It no longer works
> on linux, but now it gives an error message (below):
>
> sed '/[!-~]/!d' $1
>
>
> This is the error message:
>
> sed: -e expression #1, char 7: Invalid range end
>
> How can I fix this?
Hmm... this is a puzzle. First, as others have noted, this snippet
doesn't just delete blank lines... it deletes any line that doesn't
contain at least one 'graph' character (all printable chars except a space).
Given that as a constraint, this new-fangled sed syntax does exactly
what you have above:
sed '/[[:graph:]]/!d' $1
But let's examine what you do have. When I run this exact command using
GNU sed 4.1.5, *all* lines are deleted, not just blank ones. I then
played around with it a bit and substituted chars for the ! going up ("
then # then $, etc). All deleted all lines until I got to this:
sed '/0-~/!d'
sed: -e expression #1, char 7: Invalid range end
Interesting! Likewise, working backwards from the ~, I get the exact
same error message until I have this:
sed '/0-z/!d'
That finally works. What gives, though? That implies that non
alphanumeric chars cannot be used in a range... which is just wrong
since, for instance, [[:graph:]] is a direct substitute for [!-~]. Or
maybe it really is just those final chars:
sed '/[!-z]/!d'
That worked just fine. So it's {, |, }, and ~ that are messing with the
range.
I then tried this:
sed '/!-\x7a/!d'
That worked just like !-z as I would expect. I then replace the tilde
with 7e (its hex):
sed '/!-\x7e/!d'
Nothing... it deletes every line. Replacing ! with 0:
sed '/0-\x7e/!d'
sed: -e expression #1, char 10: Invalid range end
That really smacks of a GNU sed bug to me. I just tend to think that
something like this would have been discovered a long time ago and so
perhaps we're just using it incorrectly.
Any sed expert want to comment?
Kurt
---------------------------------------------------
PLUG-discuss mailing list -
PLUG-discuss@lists.plug.phoenix.az.us
To subscribe, unsubscribe, or to change your mail settings:
http://lists.PLUG.phoenix.az.us/mailman/listinfo/plug-discuss