grep --ignore-case --only

schatten picture schatten · Dec 14, 2011 · Viewed 151.9k times · Source

grep fails when using both --ignore-case and --only-match options. Example:

$ echo "abc" | grep -io abc
abc
$ echo "ABC" | grep -io abc
$ 

But

$ echo "abc" | grep -i abc
abc
$ echo "ABC" | grep -i abc
ABC

According to man page:

   -o, --only-matching
          Show only the part of a matching line that matches PATTERN.
   -i, --ignore-case
          Ignore case distinctions in both the PATTERN and the input files.

Is it a bug of grep or I didn't get the map page?

I am using Mac OS X 10.6.8 and

$ grep --version
grep (GNU grep) 2.5.1

Found this link: http://lists.gnu.org/archive/html/bug-gnu-utils/2003-11/msg00040.html

Of course it is possible to use workaround like grep -o [aA][bB][cC], but this doesn't seem to be a good option.

Answer

kennytm picture kennytm · Dec 14, 2011

This is a known bug on the initial 2.5.1, and has been fixed in early 2007 (Redhat 2.5.1-5) according to the bug reports. Unfortunately Apple is still using 2.5.1 even on Mac OS X 10.7.2.

You could get a newer version via Homebrew (3.0) or MacPorts (2.26) or fink (3.0-1).


Edit: Apparently it has been fixed on OS X 10.11 (or maybe earlier), even though the grep version reported is still 2.5.1.