覆盖文件的内容:">"的替代方法?

  • 本文关键字:方法 覆盖 文件 bash
  • 更新时间 :
  • 英文 :


我经常发现自己将一系列 shell 命令串在一起,最终目的是替换文件的内容。但是,使用>时,它会打开原始文件进行写入,因此您会丢失所有内容。

由于缺乏更好的术语,是否有一个"惰性评估"版本的>会等到之前的所有命令都执行完毕,然后再打开文件进行写入?

目前我正在使用:

somecommand file.txt | ... | ... > tmp.txt && rm file.txt && mv tmp.txt file.txt

这很丑陋。

sponge在这里会有所帮助:

(引自手册页)

名字 海绵 - 吸收标准输入并写入文件

概要 塞德"..."文件 |格雷普 "..." |海绵文件

描述 Sponge 读取标准输入并将其写出到指定的文件中。 与外壳重定向不同,海绵在打开之前吸收了所有输入 输出文件。这允许构造从和读取的管道 写入同一文件。

  It also creates the output file atomically by renaming a temp file into
   place,  and  preserves the permissions of the output file if it already
   exists.  If the output file is a special file or symlink, the data will
   be written to it.
  If no output file is specified, sponge outputs to stdout.

另请参阅:我可以在 Linux 中读取和写入同一文件而不覆盖它 unix.SE 吗?

相关内容

  • 没有找到相关文章

最新更新