マンページによると、次のgrep
ように指定でき-U
ます--binary
。
ファイルをバイナリとして扱います。デフォルトでは、MS-DOSおよびMS-Windowsでは、grep
ファイルから読み取られた最初の32KBの内容を調べて、ファイルの種類を推測します。grep
ファイルがテキストファイルであると判断した場合は、元のファイルの内容からCR文字を取り除きます(正規表現を作成して正しく ^
機能$
させるため)。指定 -U
すると、この当て推量が無効になり、すべてのファイルが読み取られ、一致するメカニズムにそのまま渡されます。ファイルが各行の終わりにCR/LFペアを持つテキストファイルである場合、これにより一部の正規表現が失敗します。このオプションは、MS-DOSおよびMS-Windows以外のプラットフォームには影響しません。
それで:
$ head -3 test.ctl
row 1
row 2
row 3
$ head -3 test.ctl | cat -nv
1 row 1^M
2 row 2^M
3 row 3
$ head -3 test.ctl | grep '[^[:print:]]'
$ head -3 test.ctl | grep '[[:cntrl:]]'
$ head -3 test.ctl | grep -U '[^[:print:]]'
row 1
row 2
$ head -3 test.ctl | grep -U '[[:cntrl:]]'
row 1
row 2