0 今天我正在学习排序命令。 我发现,我可以使用 sort file1 > file2 将已排序的文件注入file2 但是当我使用时 sort file1 > file1 file1变空了! 为什么?! 我知道我可以使用-o标志将文件1排序到file1中。 但为什么第二个命令产生一个空文件? linux command-line sorting — 禅 source
7 shell的输出重定向会在sort命令运行之前清除文件的内容。 来自man bash: 在执行命令之前,可以使用shell解释的特殊表示法重定向其输入和输出。[...] 输出的重定向导致打开名称来自word扩展的文件以进行写入[...]。如果文件不存在则创建; 如果确实存在则将其截断为零大小。 — 丹尼尔贝克 source 如此排序将空文件写入空文件。 — 禅 1 @Zen至少它会很快。:-) — Daniel Beck 这是一个简单的方法来清空你要保留它的shell的文件。只是'>提交'它 — 禅 我现在遇到了麻烦,因为这个方法产生一个空文件。如何通过命令行编辑此文件?就像我想用sed替换一些单词一样。 — 禅 1 @Zen如果这是关于sed,man sed实际上会在第一页帮助你。 — Daniel Beck
0 丹尼尔贝克解释了为什么失败了。 这是OP想要做的工作的一种方式。 sort file1 | tee file1 tee是一个T形管道,它可以将缓冲区写入文件并将缓冲区作为输出传递给下一个管道,这里我们只需要使用它的半功率。 — 禅 source 3 但要小心。如果第一个命令读取为流而不是缓冲整个文件(sort后者,但其他人不会),那么您将遇到类似的问题。 — 鲍勃 @Bob,我知道你的想法,比如'sed',那么如何在命令行中安全地修改文件呢? — 禅 我怀疑你对泛型方法的唯一选择(即命令本身没有提供某种方法)是手动创建临时缓冲区,例如临时文件,并写入此缓冲区+复制它或复制文件和从副本中读取。 — Bob