如何将StdOut添加到文件的顶部(而不是底部)?

时间:2012-02-21 05:02:26

标签: linux bash gnu

我正在使用bash和linux来完成在文件顶部添加内容。 到目前为止,我知道我能够通过使用临时文件来完成这项工作。所以 我是这样做的:

tac lines.bar > lines.foo
echo "a" >> lines.foo 
tac lines.foo > lines.bar 

但是有没有更好的方法来做到这一点而不必编写第二个文件?

3 个答案:

答案 0 :(得分:2)

echo a | cat - file1 > file2

与shellter的相同

并且排成一行。

sed -i -e '1 i<whatever>' file1

这将插入到file1 inplace。 the sed example i referred to

答案 1 :(得分:0)

tac是非常'昂贵'的解决方案,特别是当您需要使用2x时。虽然您仍然需要使用tmp文件,但这将花费更少的时间:

来自KeithThompson的每个笔记

编辑,现在使用'。$$'文件名和条件/bin/mv

  { 
     echo "a" 
     cat file1
  } > file1.$$  && /bin/mv file1.$$ file1

我希望这会有所帮助

答案 2 :(得分:0)

使用命名管道替换sed,您可以在文件顶部添加命令的输出,而无需明确需要临时文件:

mkfifo output
your_command >> output &
sed -i -e '1x' -e '1routput' -e '1d' -e '2{H;x}' file
rm output

这样做是在命名管道(fifo)中缓冲your_command的输出,并使用r sed命令在此输出中插入 }。为此,您需要在后台启动your_command以避免阻止fifo中的输出。

请注意,r命令在循环结束时输出文件,因此我们需要缓冲保留空间中的第一行文件,并使用第二行输出。

我在没有明确需要临时文件的情况下编写 ,因为sed可能会使用一个。