В соответствии с man-страницей 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