파일 이름의 대소 문자를 무시하지 않기 때문에 대소 문자 무시에 대한 grep 문서가 잘못 되었습니까?

파일 이름의 대소 문자를 무시하지 않기 때문에 대소 문자 무시에 대한 grep 문서가 잘못 되었습니까?

이것매뉴얼 페이지grep읽다

-i,--ignore-case

      둘 사이의 대소 문자 차이를 무시하십시오무늬및 입력 파일. (-iPOSIX에 의해 지정됩니다. )

그러나 파일 이름의 대소문자를 변경하면 작동하지 않습니다.

$ touch WHATEVER
$ grep -i pattern whatever
grep: whatever: No such file or directory

내가 뭐 놓친 거 없니?

답변1

이 혼란스러운 조각은 최신 버전의 GNU grep에서 다음과 같이 변경되었습니다.

-i, -ignore-case 대소문자만 다른 문자가 서로 일치하도록 대소문자 차이를 무시합니다.

이 커밋을 참조하세요:http://git.savannah.gnu.org/cgit/grep.git/commit/?id=e1ca01be48cb64e5eaa6b5b29910e7eea1719f91

 .BR \-i ", " \-\^\-ignore\-case
-Ignore case distinctions in both the
-.I PATTERN
-and the input files.
+Ignore case distinctions, so that characters that differ only in case
+match each other.

예를 들어 이전 공식이 어디서 왔는지에 대해 일부 프로그램에는 less(1)패턴에 대문자를 사용하면 특정 검색에 대해 대소문자 구분을 해제하는 (플래그 재정의 -i) 기능이 있는 (버그) 기능이 있습니다. 이 문서 조각의 작성자는 아마도 많은 사람들이 이러한 동작을 예상했으며 직접적인 경고를 발행하기보다는 비공식적인 문장을 선호했다고 생각했을 것입니다. FWIW, 이러한 기능은 ed(1), grep(1), vi(1)perl(1)또는 regex(3)API 의 일부가 아니었습니다 pcre(3).

emacs[1] 이는 기본값이라는 사실에서 비롯된 것으로 보입니다 . (사용자 정의 가능한) search-upper-case변수를 nil.

답변2

분명히 다른 맨페이지가 있습니다.

   -i, --ignore-case
          Ignore case distinctions, so that characters that differ only in
          case match each other.

어쨌든 이것은 파일 이름과 관련이 없습니다.

파일(콘텐츠)의 대소문자를 무시하고 패턴의 대소문자도 무시합니다.

테스트 파일:

___________
Hello World
^^^^^^^^^^^

Grep 결과(파일 내용의 대소문자 무시):

$ grep hello test.txt 

$ grep Hello test.txt 
Hello World
$ grep -i HELLO test.txt 
Hello World
$ grep -i hello test.txt 
Hello World

Grep 결과(패턴의 대소문자 무시):

$ grep [a-Z] test.txt 
grep: Invalid range end
$ grep -i [a-Z] test.txt
Hello World
$ grep -i [A-z] test.txt
Hello World
$ grep [A-z] test.txt
___________
Hello World
^^^^^^^^^^^

보시다시피 결과는 때때로 약간 예상치 못한 것일 수 있습니다.

이것이 실제로 더 중요한 예가 있는지 확실하지 않습니다.

답변3

"파일(내용)의 대소문자는 무시하지만 패턴의 대소문자도 무시합니다." 이는 패턴의 대소문자는 무시할 수 있지만 내용에서는 무시할 수 없음을 나타냅니다(반드시 그런 것은 아니지만). 이것이 어떻게 작동하는지 이해하고 싶습니다(패턴은 무시하고 내용은 무시하거나 그 반대).

예를 들어 "hello" 패턴이 파일의 "Hello"와 일치하도록 작성할 수 있지만 그 반대는 불가능합니다. 이것은 가정적인 것처럼 들리지만 맞춤법 검사가 작동하는 방식입니다. 사전에 "stack" 및 "exchange"가 포함되어 있고 문서에 "Stack Exchange"가 포함되어 있으면 맞춤법 검사가 오류 없이 성공합니다. 그러나 사전에 "Unix"가 포함되어 있고 문서에 "unix"가 포함되어 있으면 오류로 표시됩니다.

답변4

"스키마 및 입력 파일" = "스키마 및 입력 파일"존재하다입력 파일". 전치사 "in"은 "both"로 결합된 두 절에 적용됩니다.

작성자가 패턴과 입력 파일 이름의 대소문자 차이를 무시하려고 했다면 그렇게 말했을 것입니다.


댓글에서 OP는 질문의 구성이 잘못되었다고 설명했습니다. OP에 대한 응답으로실제난이도: 인용한 매뉴얼 페이지 설명의 첫 번째 줄은 "grep은 지정된 입력 파일(...)에서 주어진 패턴과 일치하는 줄을 검색합니다. 즉, grep은 파일 내용에서 match 를 검색합니다." 파일 이름과 일치합니다.

물론 OP의 설명으로 인해 허용된 답변이 숨겨진 질문에 응답하지 않게 됩니다.

관련 정보