On Thursday 03 May 2012 21:25, in comp.unix.shell, k...@kylheku.com wrote:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=655293
I ran into this doing a simple grep job that needed to match upper
case characters, and so I started Googling. This was only reported in
January.
But the Red Hat people knew about what looks like the same bug two years
ago. Oops, they didn't share!
https://bugzilla.redhat.com/show_bug.cgi?id=583011
(So much for the spirit of collaboration in open source. My distro, my
patches, screw you!)
Watch this:
$ echo a | grep '[A-B]'
a
$ echo b | grep '[A-B]'
$ echo b | grep '[:upper:]'
$ echo B | grep '[:upper:]'
$ echo E | grep '[:upper:]'
$ echo e | grep '[:upper:]'
e
Hmmm... A couple of observations
First, IIRC, the grep character classes (such as [:upper:]) syntatically
substitute for the list of characters that are enclosed by the square
brackets.
Consequently, the alternate form of '[A-B]' is not '[:upper:]', but instead
is '[[:upper:]]'. That is, the '[:upper:]' is enclosed within a set of
square brackets, just like 'A-B' is.
Thus, your examples that use
grep '[:upper:]'
should only match the characters ':', 'u', 'p', 'e', or 'r', something that
your final example /does/ show.
Second; I guess that your abberent grep behaviour wrt 'a' is version
dependant. Under GNU grep 2.5.3 (32bit Slackware Linux 12.2), I don't see
the same results. In fact, I see the results you'd properly expect from
grep.
~ $ grep -V
GNU grep 2.5.3
Copyright (C) 1988, 1992-2002, 2004, 2005 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.
~ $ for element in a b A B e ;
do
echo Using $element into grep [A-B]
echo $element | grep '[A-B]'
echo Using $element into grep [:upper:]
echo $element | grep '[:upper:]'
echo Using $element into grep [[:upper:]]
echo $element | grep '[[:upper:]]'
done
Using a into grep [A-B]
Using a into grep [:upper:]
Using a into grep [[:upper:]]
Using b into grep [A-B]
Using b into grep [:upper:]
Using b into grep [[:upper:]]
Using A into grep [A-B]
A
Using A into grep [:upper:]
Using A into grep [[:upper:]]
A
Using B into grep [A-B]
B
Using B into grep [:upper:]
Using B into grep [[:upper:]]
B
Using e into grep [A-B]
Using e into grep [:upper:]
e
Using e into grep [[:upper:]]
HTH
--
Lew Pitcher
___
gnu-misc-discuss mailing list
gnu-misc-discuss@gnu.org
https://lists.gnu.org/mailman/listinfo/gnu-misc-discuss