Согласно человеко-странице grep
, вы можете указать -U
или --binary
к:
Обработать файл (ы) в двоичном виде. По умолчанию в MS-DOS и MS-Windows grep
угадывает файл , просматривая содержимое первых 32 КБ, считанных из файла. Если 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