ファイル名の大文字と小文字を無視しないため、大文字と小文字を無視するためのgrep文書が間違っていますか?

ファイル名の大文字と小文字を無視しないため、大文字と小文字を無視するためのgrep文書が間違っていますか?

これマニュアルページgrep読む

-i--ignore-case

      2つの間の大文字と小文字の違いを無視してください模様と入力ファイル。 (-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)APIregex(3)の一部ではありませんでした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」で結合された2つのセクションに適用されます。

作成者がパターンと入力ファイル名の大文字と小文字の違いを無視しようとした場合は、そう言いました。


コメントでは、OPは質問の構成が間違っていると説明しました。 OPに応じて実際難易度:引用マニュアルページの説明の最初の行は、「grepは指定された入力ファイル(...)から指定されたパターンに一致する行を検索します。つまり、grepはファイルの内容からmatchを検索します」ファイル名と一致します。

もちろん、OPの説明は、許可された回答が隠された質問に答えないようにします。

関連情報