grep –ignore-case –only

同时使用–ignore-case和–only-match选项时,grep会失败。 例:

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

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

根据手册页:

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

这是一个错误的grep或我没有得到地图页?

我正在使用Mac OS X 10.6.8和

 $ grep --version grep (GNU grep) 2.5.1 

find这个链接: http : //lists.gnu.org/archive/html/bug-gnu-utils/2003-11/msg00040.html

当然可以使用像grep -o [aA][bB][cC]这样的解决方法,但是这似乎不是一个好的select。

这是最初的2.5.1中已知的一个bug ,根据bug报告,在2007年初(Redhat 2.5.1-5)已经修复。 不幸的是,即使在Mac OS X 10.7.2上,苹果仍然使用2.5.1。

您可以通过自制软件(3.0)或MacPorts(2.26)或fink(3.0-1)获得更新的版本。


编辑:显然它已被修复OS X 10.11(或者更早),即使报告的grep版本仍然是2.5.1。

这应该是你的版本的grep问题。

您的testing用例在我的机器上正常工作:

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

而我的版本是:

 $ grep --version grep (GNU grep) 2.10 

如果你的grep -i不起作用,那么尝试使用tr命令将你的文件的输出转换成小写,然后用你想要的任何东西把它转换成标准的grep。 (这听起来很复杂,但我提供给你的实际命令不是!)。

注意tr命令不会改变你的原始文件的内容,只是在它把它送入grep之前转换它。

1.你可以在文件上做到这一点

 tr '[:upper:]' '[:lower:]' <your_file.txt|grep what_ever_you_are_searching_in_lower_case 

或者如果你只是回应一些东西

 echo "ABC"|tr '[:upper:]' '[:lower:]' | grep abc 

我build议-i表示它匹配“ABC”,但差异在输出中。 -i不会操作input,所以不会将“ABC”更改为“abc”,因为您指定了“abc”作为模式。 -o表示它只显示与指定模式相匹配的输出部分,并不表示匹配input。

echo "ABC" | grep -i abc的输出 echo "ABC" | grep -i abcABC-o显示匹配“abc”的输出,所以没有显示:

 Naos:~ mattlacey$ echo "ABC" | grep -i abc | grep -o abc Naos:~ mattlacey$ echo "ABC" | grep -i abc | grep -o ABC ABC