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
)并行工作,因此可能会发生意外行为。一些像 sed
和 perl
这样的命令有像 -i
这样的选项允许就地文件操作,但通常最安全的只是假设它是不允许的。肮脏的解决方法是这样的:
uniq 1.txt > tmpfile
mv tmpfile 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