将 less 输出到文件中

将 less 输出到文件中

在 bash 上,我尝试使用以下命令删除文件的最后 3 列:

head -n -3 文件 > 文件

但文件是空的。我可以解决这个问题,但我想知道是什么原因造成的。

非常感谢!

答案1

让我们分析一下该命令的作用。

  1. > file

    这将打开file以进行写入,然后将其截断。

  2. head -n -3 file

    这将读取除最后 3 行之外的所有内容filefile是的,和您在步骤 1 中截断的相同。

答案2

您尝试执行的是内联替换,如果没有解决方法,这实际上是不可能的。在您的命令中,原始文件被覆盖,因为当您发出命令时它已被打开并清除。

以下是一些想法:

  • 使用临时文件

    head -n -3 file > tmp
    mv tmp file
    
  • 使用sponge工具来自moreutils,它吸收所有输入然后写入文件:

    head -n -3 file | sponge file
    

答案3

你可以在 Ex 模式下使用 Vim:

ex -sc '-2,d|x' file
  1. -2,选择最后 3 行

  2. d删除

  3. x保存并关闭

相关内容