为什么 grep 和 grep -v 具有相同模式的行数不等于输入行数?

为什么 grep 和 grep -v 具有相同模式的行数不等于输入行数?

这怎么可能呢(两个正则表达式是相同的):

tmp$ grep    "^[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*$" 2018.csv > 2018a.csv
tmp$ grep -v "^[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*$" 2018.csv > 2018-wrong.csv
tmp$ wc -l 2018*
  289211 2018a.csv
  292005 2018.csv
       1 2018-wrong.csv

我想将文件 2018.csv 拆分为两组,2018a.csv 包含与模式匹配的行,2018-wrong.csv 包含不匹配的行。由于这是非此即彼的,所以每行都放在两个文件之一中,因此两个文件中的行数总和应该与输入文件中的行数相匹配。为什么文件 2018a.csv 和 2018-wrong.csv 的行数总和不等于文件 2018.csv 中的行数?为什么缺少 2795 行?

知道为什么行数总和不匹配吗?

答案1

答案在 2018-wrong.csv 文件中,其中包含一行:

二进制文件 2018.csv 匹配

由于一些变音符号,该文件不是纯文本文件...

当我使用 grep -a 和 grep -av 进行 grepping 时,行数相加。

相关内容