在 VIM 中编辑过文本后无法使用 uniq 过滤重复行

下载了个 Debian 的镜像,校验哈希 256 实操如下:
lsmscnm@localhost:~/下载> echo “1e8037d1d208b4d6a2f4ff54cacc8df8f6e51ec326be8598661a1d9988839158 debian-12.5.0-amd64-DVD-1.iso” > sum.txt ; sha256sum debian-12.5.0-amd64-DVD-1.iso >> sum.txt ; cat sum.txt
1e8037d1d208b4d6a2f4ff54cacc8df8f6e51ec326be8598661a1d9988839158 debian-12.5.0-amd64-DVD-1.iso
1e8037d1d208b4d6a2f4ff54cacc8df8f6e51ec326be8598661a1d9988839158 debian-12.5.0-amd64-DVD-1.iso
lsmscnm@localhost:~/下载> cat sum.txt |uniq
1e8037d1d208b4d6a2f4ff54cacc8df8f6e51ec326be8598661a1d9988839158 debian-12.5.0-amd64-DVD-1.iso

以上是直接把从官网复制的校验值和镜像校验导入,这种情况成功过滤。

而这里没把官网上的文件名复制,所以手动用 VIM 删除了亲手校验出的文件名,但不知为何这种情况就无法过滤了。

lsmscnm@localhost:~/下载> echo 1e8037d1d208b4d6a2f4ff54cacc8df8f6e51ec326be8598661a1d9988839158 > test.txt ; sha256sum debian-12.5.0-amd64-DVD-1.iso >>test.txt
lsmscnm@localhost:~/下载> cat test.txt
1e8037d1d208b4d6a2f4ff54cacc8df8f6e51ec326be8598661a1d9988839158
1e8037d1d208b4d6a2f4ff54cacc8df8f6e51ec326be8598661a1d9988839158 debian-12.5.0-amd64-DVD-1.iso
lsmscnm@localhost:~/下载> VIM test.txt
lsmscnm@localhost:~/下载> cat test.txt
1e8037d1d208b4d6a2f4ff54cacc8df8f6e51ec326be8598661a1d9988839158
1e8037d1d208b4d6a2f4ff54cacc8df8f6e51ec326be8598661a1d9988839158
lsmscnm@localhost:~/下载> cat test.txt |uniq
1e8037d1d208b4d6a2f4ff54cacc8df8f6e51ec326be8598661a1d9988839158
1e8037d1d208b4d6a2f4ff54cacc8df8f6e51ec326be8598661a1d9988839158

希望有人告诉我下我哪一步错了。

没删干净有空格呗

试试 cat -E。另外你用 sha256sum -c 就好了啊。

感谢,确实是空格没删除,用-E 选项一下就明了了。
因为之前上网查的时候我没看懂这个命令是怎么用的 (不清楚光靠校验一个有散列值的 txt 是怎么和文件本身关联起来的,刚才才发现是靠文件名。),所以就跳过了。
而且照着有些教程里的方法去做还莫名其妙的失败了,我就更懵了,感觉贼难就用 uniq 了。

这个教程里的方法我实在是看不懂,为什么连括号都出来了。。。:

https://zh.opensuse.org/SDB:下载帮助#.E6.A0.A1.E9.AA.8C.E6.96.87.E4.BB.B6

<(cmd) 是用命令的输出的管道文件作为参数。这里的用途是过滤掉你没下载的文件,避免一大堆「文件未找到」的输出。

命令行的语法可以 man bash 或者找其它相关资源学习。