2016-02-12 101 views
-2

我有一个名为“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

+0

什么让您不使用'cat header otherfile> myoutputfile'? –

+0

如果在添加标题之前有很多管道发生“otherfile”,并且您不想将管道分成两个命令 - 那么您最好使用“sed”解决方案。否则确定,你可以输出到一个临时输出文件并使用:cat header tempoutput> myoutputfile; rm tempoutput;但这并不像我写的解决方案那么简洁。 – Roy

+0

然后问题应该说,因为它被写入,没有理由使用sed。 –

回答

2

的回答你的问题说的问题很简单:

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 
-1

确定,这是适用于我的解决方案:

cat otherfile | sed -e '2{x;G};1{h;rheader' -e 'd}' - > myoutputfile 
+0

这没有任何意义。我即将开始使用UUOC,但它实际上是UUOS,无用的Sed使用,因为它正是'cat'创建的工作:'cat rheader otherfile> myoutputfile'。 –

+0

@EdMorton在这个问题下看到评论:显然它是超长处理链的一部分。 –

+0

@BenjaminW。即使'cat otherfile'是一个管道命令链,这是一个非常复杂的方式来预先存储另一个文件的内容,比如说'cat otherfile | cat header - > myoutputfile'。 –

1

这可能适用于您(GNU sed):

sed -e '1h;1r header' -e '1d;2H;2g' file 

或:

sed '1e cat header' file 
相关问题