我想过滤文件中以空格开头的行。我使用以下命令:
grep -v "^ " < input > input_no_starting_space
为了仔细检查结果,我运行以下命令:
grep "^ " < input > double_check
input_no_starting_space
然后计算和中的行数,double_check
看看它们的总和是否等于 中的行数input
。为此,我使用wc -l
.
由于某种原因,此检查失败。意思是,行数之和小于 中的行数input
。我的文件有数百万行,但我似乎无法在一个小示例上重现该问题。我使用 grep 的方式是否有任何问题(因为我希望这一点grep
并且grep -v
总是互相补充),或者这更有可能是我的文件中的一个工件?如果是后者,这个神器会是什么?
这是在 Ubuntu 20.04.3 上使用 GNU grep 3.4。
答案1
可能是,您的input_file
不只包含文本数据。
尝试使用grep
with-a
选项。
另请参阅命令--binary-files=TYPE
选项grep
以及man grep
有关数据编码和 NULL 值的第一段:
如果文件的数据或元数据表明该文件包含二进制数据,则假定该文件的类型为 TYPE。非文本字节表示二进制数据;这些要么是针对当前语言环境编码不正确的输出字节,要么是未给出 -z 选项时的空输入字节。