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

标签 linux shell command-line-interface io-redirection uniq

<分区>

我刚开始学习 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

关于linux - 带有重定向的 linux uniq 命令出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58070337/

相关文章:

linux - 我需要找出我的 Ubuntu 上安装了哪些补丁

bash - shell - temp IFS 仅作为换行符。为什么这不起作用 : IFS=$(echo -e '\n' )

git - vim中如何去掉 "^[[m"和 "^[[32"字符

linux - 自动化 bash 脚本

c - 使用 unix shell 测试系统的字节顺序

javascript - process.stdout.write() 在 Node.js readline CLI 程序中不起作用

git - 如何列出所有曾经在 Git 中提交过文件的人?

linux - 从 Linux 设备驱动程序打开设备文件

java - InetAddress getAllByName 不管理主机条目中提到的返回 IP 地址的顺序

linux - 获取ssh motd的终端宽度?