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.
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.