Article View: comp.unix.shell
Article #4142Re: grep is screwed on Debian, Ubuntu and others ...
From: Lew Pitcher
Date: Fri, 04 May 2012 02:05
Date: Fri, 04 May 2012 02:05
88 lines
3737 bytes
3737 bytes
On Thursday 03 May 2012 21:25, in comp.unix.shell, kaz@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
Technical Details
Message-ID:
<7QGor.22191$em4.6868@newsfe21.iad>Path:
arc1-ca.pugleaf.net!pr3ni1389pbb.0!nntp.google.com!news2.google.com!npeer02.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!post01.iad.highwinds-media.com!newsfe21.iad.POSTED!00000000!not-for-mailReferences:
<20120503180629.531@kylheku.com>Show Full Headers
Complete Article Headers
X-Google-Thread: 1025b4,4e23b22adef8b0c2
X-Google-NewGroupId: yes
X-Google-Attributes: gidfeffdbf771,domainid0,public,usenet
X-Google-Language: ENGLISH,ASCII-7-bit
Received: by 10.68.125.233 with SMTP id mt9mr4334813pbb.5.1336097155960;
Thu, 03 May 2012 19:05:55 -0700 (PDT)
Path: arc1-ca.pugleaf.net!pr3ni1389pbb.0!nntp.google.com!news2.google.com!npeer02.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!post01.iad.highwinds-media.com!newsfe21.iad.POSTED!00000000!not-for-mail
From: Lew Pitcher <lpitcher@teksavvy.com>
Subject: Re: grep is screwed on Debian, Ubuntu and others ...
Newsgroups: comp.unix.shell,gnu.misc.discuss
Followup-To: comp.unix.shell
Reply-To: lew.pitcher@digitalfreehold.ca
References: <20120503180629.531@kylheku.com>
Lines: 89
MIME-Version: 1.0
Message-ID: <7QGor.22191$em4.6868@newsfe21.iad>
X-Complaints-To: abuse@UsenetServer.com
NNTP-Posting-Date: Fri, 04 May 2012 02:05:55 UTC
Date: Thu, 03 May 2012 22:05:54 -0400
X-Received-Bytes: 3351
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7Bit