键入文件内容,通过管道执行一些操作并将结果放回

键入文件内容,通过管道执行一些操作并将结果放回

有没有办法做这样的事情:

cat somefile.txt | sort | uniq > somefile.txt

即,我想列出整个文件,然后将一些操作传输到其内容,最后将结果放回源文件并完全覆盖它。现在我通过将输出放到临时文件,然后将其移到原始文件上来执行此操作。我想像 Linux 管道允许的那样以简单的方式执行此操作。

Shellbash在 Linux 中cmd很重要,在 Windows 中也是如此。

答案1

(回答 bash)
不。shell 首先处理重定向,然后截断文件。然后才cat启动,并且使用空文件进行操作。

sponge包中有一个名为的工具moreutils可以让你执行此操作:

cat somefile.txt | sort | uniq | sponge somefile.txt

此命令可以简化(删除联合大学):

sort -u somefile.txt | sponge somefile.txt

无需sponge写入临时文件,如果命令成功,则覆盖输入文件

tmpfile=$(mktemp)
sort -u somefile.txt > "$tmpfile" && mv "$tmpfile" somefile.txt

答案2

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

ex -sc 'sort u|x' somefile.txt
  1. sort u唯一排序

  2. x保存并关闭

相关内容