我正在尝试从somefile
获取前4行,将它们与someotherfile
的内容连接起来并输出到somefile
。
head -4 /somefile | cat - /someotherfile > /somefile
当我这样做时,someotherfile
的内容最终会出现在somefile
中,而不是前4行。如果我输出到一个完全不同的文件,那么它的效果很好。
显然尝试写入我正在阅读的同一文件时存在问题。完成这项任务最简单的方法是什么?
我试图在RedHat Enterprise 6上执行此操作,bash shell。
答案 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
。