grep -v 不返回 grep 的补集

grep -v 不返回 grep 的补集

我想过滤文件中以空格开头的行。我使用以下命令:

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不只包含文本数据。

尝试使用grepwith-a选项。

另请参阅命令--binary-files=TYPE选项grep以及man grep有关数据编码和 NULL 值的第一段:

如果文件的数据或元数据表明该文件包含二进制数据,则假定该文件的类型为 TYPE。非文本字节表示二进制数据;这些要么是针对当前语言环境编码不正确的输出字节,要么是未给出 -z 选项时的空输入字节。

相关内容