linux 带有重定向的 uniq 命令出错

error with linux uniq command with redirection

我刚开始学习Linux cli,遇到了一个有趣的问题。

我创建了一个 1.txt 文件:

1
1
2
2
3

当我使用 uniq 1.txt 时,它会发出 1 2 3。我决定将这个结果输出到 1.txt,所以这个小技巧将删除文件中所有重复的元素并保存它。为此,我使用了这个命令:uniq 1.txt > 1.txt。但最后它显示 1.txt 文件完全是空的。谁能帮助我了解发生了什么?

通常在 bash 中,您应该避免通过管道传输到前面命令中使用的文件。管道(来自 >)通常与命令(在本例中为 uniq)并行工作,因此可能会发生意外行为。一些像 sedperl 这样的命令有像 -i 这样的选项允许就地文件操作,但通常最安全的只是假设它是不允许的。肮脏的解决方法是这样的:

uniq 1.txt > tmpfile
mv tmpfile 1.txt