Гриппинг непечатных символов Cygwin - PullRequest
4 голосов
/ 21 марта 2012

Удаление непечатных символов не похоже на возврат каретки (управляющая клавиша ^ 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 ~

1 Ответ

5 голосов
/ 21 марта 2012

В соответствии с 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
...