Laz*_*zer 3 unix bash shell grep
$ cat weirdo
Lunch now?
$ cat weirdo | grep Lunch
$ vi weirdo
^@L^@u^@n^@c^@h^@ ^@n^@o^@w^@?^@
Run Code Online (Sandbox Code Playgroud)
我有一些文件包含一些非打印字符的文本,这些字符^@导致我grep的失败(如上所述).
我怎样才能得到我的grep工作?有什么方法不需要改变文件?
看起来您的文件是以UTF-16编码而不是8位字符集.'^ @'是ASCII NUL'\ 0'的符号,通常会破坏字符串匹配.
一种无损处理的技术是使用过滤器将UTF-16转换为UTF-8,然后grep在输出上使用- 假设,如果命令是'utf16-utf8',你会写:
utf16-utf8 weirdo | grep Lunch
Run Code Online (Sandbox Code Playgroud)
作为'utf16-utf8'令人震惊的粗略近似,您可以考虑:
tr -d '\0' < weirdo | grep Lunch
Run Code Online (Sandbox Code Playgroud)
这将从输入文件中删除ASCII NUL字符,并允许grep对"已清理"输出进行操作.从理论上讲,它可能会给你误报; 在实践中,它可能不会.
该tr命令是为此:
cat weirdo | tr -cd '[:print:]\r\n\t' | grep Lunch
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4159 次 |
| 最近记录: |