이것매뉴얼 페이지grep
읽다
-i
,--ignore-case
둘 사이의 대소 문자 차이를 무시하십시오무늬및 입력 파일. (
-i
POSIX에 의해 지정됩니다. )
그러나 파일 이름의 대소문자를 변경하면 작동하지 않습니다.
$ 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의 설명으로 인해 허용된 답변이 숨겨진 질문에 응답하지 않게 됩니다.