<分区>
我刚开始学习 Linux cli,遇到了一个有趣的问题。
我创建了一个 1.txt 文件:
1
1
2
2
3
当我使用 uniq 1.txt
时,它会发出 1 2 3
。我决定将此结果输出到 1.txt
,因此这个小技巧将删除文件中的所有重复元素并保存。为此,我使用了这个命令:uniq 1.txt > 1.txt
。但最后它显示 1.txt
文件完全是空的。谁能帮助我了解发生了什么?
<分区>
我刚开始学习 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
)并行工作,因此可能会出现意外行为。 sed
和 perl
等命令具有允许就地文件操作的选项,例如 -i
,但通常最安全的做法只是假设它是不允许的。肮脏的解决方法是这样的:
uniq 1.txt > tmpfile
mv tmpfile 1.txt
关于linux - 带有重定向的 linux uniq 命令出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58070337/