我有一个很大的utf-8文本文件,经常使用来搜索grep
。最近grep
开始报告它是一个二进制文件。我可以继续使用搜索它grep -a
,但是我想知道是什么更改决定了文件现在是二进制文件。
我有上个月的副本,该文件不再被检测为二进制文件,但是对diff
他们来说不切实际,因为它们的差异超过20,000行。
file
将我的文件标识为
UTF-8 Unicode英文文本,行很长
如何找到字符/行/等。在我的文件中哪些触发了此更改?
类似的,非重复的问题19907涵盖了NUL的可能性,但grep -Pc '[\x00-\x1F]'
说我没有NUL或任何其他ANSI控制特性。
nul
和Esc
。我为他们尝试了grepping。我可以找到esc
s(\x1B
),但nul
从未出现。上面给出的测试显示,对于包含Esc
s 的行,显示1,但是对于不包含的任何范围,则没有显示\x1B
。我不相信那个测试。试一试grep -zc .
(应该比nul
文件中的s大1)。(另外,使用可能会更好[[:cntrl:]]
。)
sed -z 's/.*\(....\)$/\1/' foo | od -c
在NUL
(如果有)之前看到几个字符,这可能会导致您遇到问题。
sed
没有-z
选择:sed: invalid option -- 'z'
。