我在文件夹中抓取某个文本时遇到了一些问题.
grep "Notifying status" -R
Binary file fix2.log matches
Run Code Online (Sandbox Code Playgroud)
事实证明,包含文本的文件是二进制文件.实际上它是一个日志文件(由PAC管理器创建),可以使用notepad ++(或任何其他文本文件)正确读取.我不确定为什么操作系统会确定它
当我这样做时ls
,所有文件都列出相同的-rwxr--r--
当我这样做file fix2.log
时显示为data
是否有任何命令可以显示文件是否为二进制文件,例如来自ls
视图?
在Linux/Unix下,查找不是"text/plain"的任何内容:
$ file -I -b /tmp/local-access.log
text/plain; charset=us-ascii
Run Code Online (Sandbox Code Playgroud)
编辑:
实际上,因为file
没有不同类型的文本文件之间进行分类,编码可能是更好的路要走:
$ echo "Testing" | file -I -b -
text/plain; charset=us-ascii
$ echo "<html></html>" | file -I -b -
text/html; charset=us-ascii
$ echo "<?xml version="1.0"?><catalog></catalog>" | file -I -b -
application/xml; charset=us-ascii
$ echo "<?xml version="1.0"?><catalog></catalog>" | file --mime-encoding -b -
us-ascii
Run Code Online (Sandbox Code Playgroud)
注意@ CharlesDuffy的评论如下.这只会检查一些头/尾信息,但是,1)这对于所有非异国情况都是足够的(大多数二进制文件不会在文件的正面和背面有纯文本),2)你不要如果输入具有任意长度(例如2G),则必须检查每个字节
grep
只是为其"二进制"测定寻找非ASCII内容.您可以使用-a
标志轻轻覆盖它,以假设所有内容都是文本:
grep -a "Notifying status" -R
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
172 次 |
最近记录: |