GREP - 文件中的模式匹配仅返回列表中的最后一个模式

GREP - 文件中的模式匹配仅返回列表中的最后一个模式

我在一个文本文件中有一个包含大约 2300 万个哈希值的列表,每行一个哈希值。称之为 hashes.txt 我在另一个文本文件中有一个令人讨厌的哈希值列表(app 40),同样每行一个哈希值。将其命名为 culls.txt

我正在尝试使用 culls.txt 中的模式执行反向 grep,也就是说,我想输出与剔除列表中的任何模式都不匹配的任何行。

grep -v -F -f culls.txt hashes.txt > Output.txt

正在发生的事情是,只有 40 个左右的列表中的最后一个哈希值被删除了。前面几行的所有哈希值均保留。我很受阻。建议?并且,是的,这些值位于哈希文件中;->

答案1

仅识别最后一个哈希的事实可能表明除最后一行之外的所有行都存在行结束问题。

我已经在我的系统(Ubuntu 14.04;grep (GNU grep) 2.16)上使用以下文件对此进行了测试:

$ cat culls.txt 
h00
h10
h20
h30
h40
$ cat culls2.txt 
h00
h10
h20
h30
h40
$ cat hashes.txt 
h04
h11
h13
h30
h61
h40
h41
h39
h42
$ file culls.txt hashes.txt  culls2.txt
culls.txt:  ASCII text
hashes.txt: ASCII text
culls2.txt: ASCII text, with CRLF line terminators

我得到的输出culls.txt符合预期(h30h40从输出中删除):

$ grep -v -F -f culls.txt hashes.txt
h04
h11
h13
h61
h41
h39
h42

我得到的输出culls2.txt与您看到的类似(仅从h40输出中删除;h30仍然存在):

$ grep -v -F -f culls2.txt hashes.txt
h04
h11
h13
h30
h61
h41
h39
h42

的最后一行没有行结尾culls2.txt

当我还在最后一行添加 CRLF 行终止符时,我得到:

$ grep -v -F -f culls3.txt hashes.txt
h04
h11
h13
h30
h61
h40
h41
h39
h42

现在,输出中不再删除任何哈希值。

这证明 CRLF 行终止符是问题所在。

相关内容