Shell one-liner将一行添加到已排序的文件中

Sco*_*ter 3 sorting shell sed pipe

我想在文本文件中添加一行,以便对文本文件最初排序的结果进行排序.例如:

cp file tmp; echo "new line" >> tmp; sort tmp > file; rm -f tmp
Run Code Online (Sandbox Code Playgroud)

我真的很喜欢没有临时文件和没有分号(使用管道代替吗?); 使用sed是可以接受的.这是可能的,如果是的话,怎么样?

Leo*_*eon 7

这是我能想到的最短的衬里,没有任何临时文件:

$ echo "something" >> file; sort file -o file
Run Code Online (Sandbox Code Playgroud)


Jon*_*ler 7

echo "New Line" | sort -o file - file
Run Code Online (Sandbox Code Playgroud)

-o file意味着将结果写入文件(并且将任何输入文件作为输出文件显然是安全的).在-它自己的方式"读标准输入"其中包含的信息,新的生产线.将file在最后的手段"也读file".这适用于从(至少)第七版UNIX™大约1978年开始的任何Unix排序,甚至可能在此之前.其他实用程序没有临时文件或依赖项.

鉴于单行是"已排序"且文件也按排序顺序排列,您可以通过合并两个已排序的输入来加快进程:

echo "New Line" | sort -o file -m - file
Run Code Online (Sandbox Code Playgroud)

这也适用于甚至非常旧的排序命令.