inz*_*zzz 4 bash shell grep cygwin non-printable
Grepping不可打印的字符似乎不适用于回车(控制键^ 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 ~
Run Code Online (Sandbox Code Playgroud)
根据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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2021 次 |
| 最近记录: |