4

印刷できない文字の削除は、キャリッジリターン(コントロールキー^ M)では機能しないようです。

usr@R923047 ~
$ head -3 test.ctl
row 1
row 2
row 3
usr@R923047 ~
$ head -3 test.ctl | cat -nv
     1  row 1^M
     2  row 2^M
     3  row 3
usr@R923047 ~
$ head -3 test.ctl | grep '[^[:print:]]'

usr@R923047 ~
$ head -3 test.ctl | grep '[[:cntrl:]]'

usr@R923047 ~
4

1 に答える 1

5

マンページによると、次の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
于 2012-03-21T11:26:48.583 に答える