我正在使用bash和linux来完成在文件顶部添加内容。 到目前为止,我知道我能够通过使用临时文件来完成这项工作。所以 我是这样做的:
tac lines.bar > lines.foo
echo "a" >> lines.foo
tac lines.foo > lines.bar
但是有没有更好的方法来做到这一点而不必编写第二个文件?
答案 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
可能会使用一个。