在使用sed输入另一个文件的第一行之前从文本文件输入文本
我有一个名为“header”的文本文件,我希望将它作为已经包含一些文本的“anotherfile”的头文件插入。 最终的输出应该是:在使用sed输入另一个文件的第一行之前从文本文件输入文本
“标题”文本内容 右上方 “otherfile”文本内容
在Ubuntu Linux系统,我尝试以下,这让我接近,但并不完全:
cat otherfile | sed '1 r header' - > myoutputfile
这个解决方案的问题是,它会在“otherfile”的第一行之后的一行内输入“标题”的所有内容,而不是在“otherfile”的第一行之前。
有什么简洁的方法可以让我的“标题”文件的内容显示为“otherfile”的标题吗?
我应该指出,以下尝试
cat otherfile | sed '0 r header' - > myoutputfile
失败,出现以下错误消息: 的sed:-e表达#1,字符3:线地址的无效使用0
的回答你的问题说的问题很简单:
cat header otherfile > myoutputfile
但是,为了回答您的评论的问题:假设cat otherfile
一些管道,而不是一个文件,所有你需要的是:
cat otherfile | cat header - > myoutputfile
例如:
$ cat file1
a
b
c
$ cat file2
foo
bar
$ cat file1 | cat file2 -
foo
bar
a
b
c
确定,这是适用于我的解决方案:
cat otherfile | sed -e '2{x;G};1{h;rheader' -e 'd}' - > myoutputfile
这没有任何意义。我即将开始使用UUOC,但它实际上是UUOS,无用的Sed使用,因为它正是'cat'创建的工作:'cat rheader otherfile> myoutputfile'。 –
@EdMorton在这个问题下看到评论:显然它是超长处理链的一部分。 –
@BenjaminW。即使'cat otherfile'是一个管道命令链,这是一个非常复杂的方式来预先存储另一个文件的内容,比如说'cat otherfile | cat header - > myoutputfile'。 –
这可能适用于您(GNU sed):
sed -e '1h;1r header' -e '1d;2H;2g' file
或:
sed '1e cat header' file
什么让您不使用'cat header otherfile> myoutputfile'? –
如果在添加标题之前有很多管道发生“otherfile”,并且您不想将管道分成两个命令 - 那么您最好使用“sed”解决方案。否则确定,你可以输出到一个临时输出文件并使用:cat header tempoutput> myoutputfile; rm tempoutput;但这并不像我写的解决方案那么简洁。 – Roy
然后问题应该说,因为它被写入,没有理由使用sed。 –