如何连接两个文件并将结果写回原始文件之一

时间:2014-10-29 22:44:46

标签: linux bash pipe cat head

我正在尝试从somefile获取前4行,将它们与someotherfile的内容连接起来并输出到somefile

head -4 /somefile | cat - /someotherfile > /somefile

当我这样做时,someotherfile的内容最终会出现在somefile中,而不是前4行。如果我输出到一个完全不同的文件,那么它的效果很好。

显然尝试写入我正在阅读的同一文件时存在问题。完成这项任务最简单的方法是什么?

我试图在RedHat Enterprise 6上执行此操作,bash shell。

3 个答案:

答案 0 :(得分:0)

这正是问题所在:

“显然,尝试写入我正在阅读的同一文件时存在问题。”

使用另一个文件写入,完成后将其移动到原始文件覆盖它。或者在写入之前先使用某种工具在内存中读取原始文件,但我不确定bash是否有类似的内容。

答案 1 :(得分:0)

您可以将head输出保存到临时变量,如下所示:

HEAD="$(head -4 some file)"
(echo "$HEAD"; cat someotherfile) >some file

或者您可以从5开始删除所有行,并将另一个文件的内容追加到最后:

sed -i '5,$d' somefile
cat someotherfile >>somefile

答案 2 :(得分:0)

因此,您似乎想编辑文件somefile,如下所示:删除第四行后的所有内容,并附加文件someotherfile

您可以使用标准编辑器ed

ed -s somefile < <(printf '%s\n' '5,$d' 'r someotherfile' 'wq') &> /dev/null
  • 5,$d告诉ed删除从第五行到文件末尾的所有内容(&>/dev/null此处不会看到任何ed&#39;如果文件somefile少于4行,则投诉。
  • r someotherfile将插入文件someotherfile
  • wq如何说 kthxbye(并保存)ed