IT TIP

grep --ignore-case --only

itqueen 2020. 11. 5. 20:01
반응형

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

man 페이지에 따르면 :

   -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

이 링크를 찾았습니다 : http://lists.gnu.org/archive/html/bug-gnu-utils/2003-11/msg00040.html

물론과 같은 해결 방법을 사용할 수 grep -o [aA][bB][cC]있지만 이것은 좋은 옵션이 아닌 것 같습니다.


이것은 초기 2.5.1 알려진 버그 이며 버그 보고서에 따라 2007 년 초 (Redhat 2.5.1-5)에 수정되었습니다. 불행히도 Apple은 Mac OS X 10.7.2 에서도 2.5.1을 사용하고 있습니다.

Homebrew (3.0) 또는 MacPorts (2.26) 또는 fink (3.0-1)을 통해 최신 버전을 얻을 수 있습니다.


편집 :보고 된 grep 버전이 여전히 2.5.1 임에도 불구하고 OS X 10.11 (또는 이전 버전)에서 수정되었습니다.


grep 버전에서 문제가 될 것입니다.

내 컴퓨터에서 테스트 사례가 올바르게 작동합니다.

$ 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

2. 또는 귀하의 경우에 무언가를 반향하는 경우

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

-i의미가 "ABC"와 일치 한다고 제안 하지만 차이점은 출력에 있습니다. -i입력을 조작하지 않으므로 "abc"를 패턴으로 지정했기 때문에 "ABC"를 "abc"로 변경하지 않습니다. -o지정된 패턴과 일치하는 출력 부분 만 표시하고 입력 일치에 대해서는 언급하지 않습니다.

출력 echo "ABC" | grep -i abcIS ABC상기 -o방송 출력 정합 "ABC"아무것도 쇼 : 그래서

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

참고 URL : https://stackoverflow.com/questions/8498407/grep-ignore-case-only

반응형