为什么“排序文件>文件”会删除该文件的所有内容?


0

今天我正在学习排序命令。

我发现,我可以使用

sort file1 > file2

将已排序的文件注入file2

但是当我使用时

sort file1 > file1

file1变空了!

为什么?!

我知道我可以使用-o标志将文件1排序到file1中。

但为什么第二个命令产生一个空文件?

Answers:


7

shell的输出重定向会在sort命令运行之前清除文件的内容。

来自man bash

在执行命令之前,可以使用shell解释的特殊表示法重定向其输入和输出。[...]

输出的重定向导致打开名称来自word扩展的文件以进行写入[...]。如果文件不存在则创建; 如果确实存在则将其截断为零大小。


如此排序将空文件写入空文件。

1
@Zen至少它会很快。:-)
Daniel Beck

这是一个简单的方法来清空你要保留它的shell的文件。只是'>提交'它

我现在遇到了麻烦,因为这个方法产生一个空文件。如何通过命令行编辑此文件?就像我想用sed替换一些单词一样。

1
@Zen如果这是关于sed,man sed实际上会在第一页帮助你。
Daniel Beck

0

丹尼尔贝克解释了为什么失败了。

这是OP想要做的工作的一种方式。

sort file1 | tee file1

tee是一个T形管道,它可以将缓冲区写入文件并将缓冲区作为输出传递给下一个管道,这里我们只需要使用它的半功率。


3
但要小心。如果第一个命令读取为流而不是缓冲整个文件(sort后者,但其他人不会),那么您将遇到类似的问题。
鲍勃

@Bob,我知道你的想法,比如'sed',那么如何在命令行中安全地修改文件呢?

我怀疑你对泛型方法的唯一选择(即命令本身没有提供某种方法)是手动创建临时缓冲区,例如临时文件,并写入此缓冲区+复制它或复制文件和从副本中读取。
Bob
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.