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