使用sed在另一个文件的第一行之前输入文本文件中的文本

使用sed在另一个文件的第一行之前输入文本文件中的文本,sed,Sed,我有一个名为“header”的文本文件,我希望将其作为已经包含一些文本的“anotherfile”的头插入。 最终输出应为: “标题”文本内容 正上方 “其他文件”文本内容 在UbuntuLinux系统上,我尝试了以下方法,这让我很接近,但不是很接近: cat otherfile | sed '1 r header' - > myoutputfile 此解决方案的问题是,它将“header”的所有内容输入到“otherfile”的第一行之后的一行,而不是“otherfile”的第一行之前

我有一个名为“header”的文本文件,我希望将其作为已经包含一些文本的“anotherfile”的头插入。 最终输出应为:

“标题”文本内容 正上方 “其他文件”文本内容

在UbuntuLinux系统上,我尝试了以下方法,这让我很接近,但不是很接近:

cat otherfile | sed '1 r header' - > myoutputfile
此解决方案的问题是,它将“header”的所有内容输入到“otherfile”的第一行之后的一行,而不是“otherfile”的第一行之前

是否有任何简洁的方法使我的“头”文件的内容显示为“其他文件”的头

我应该提到以下尝试

cat otherfile | sed '0 r header' - > myoutputfile
失败,并显示以下错误消息:
sed:-e表达式#1,字符3:行地址0的使用无效

好的,这是适合我的解决方案:

cat otherfile | sed -e '2{x;G};1{h;rheader' -e 'd}' - > myoutputfile
这可能适用于您(GNU-sed):

或:


你的问题的答案很简单:

cat header otherfile > myoutputfile
但要回答您评论中的问题:假设
cat otherfile
是某个管道,而不是实际的文件,您只需要:

cat otherfile | cat header - > myoutputfile
e、 g:


是什么阻止您使用
cat header otherfile>myoutputfile
?如果在添加头之前“otherfile”发生了大量管道问题,并且您不想将管道分成两个命令,那么您最好使用“sed”解决方案。否则,您可以输出到临时输出文件并使用:cat header tempoutput>myoutputfile;rm输出;但这并不像我所写的解决方案那么简洁。那么问题应该说明,因为正如所写的,没有理由使用sed。问题是专门询问如何使用sed。在[cat otherfile]之前的“不必要”或管道提示。例如:my_saf_file=
ls*.saf
;samtools视图-SH$my_saf_文件-o头;cat$my_saf_file|sed-e'/\trDNA\t/d'-e'/\tSN:rDNA\t/d'-e'/\tmtDNA\t/d'-e'/\tSN:mtDNA\t/d'| samtools视图-Sb-| intersectBed-v-abam stdin-b/data/leelab/common/Mus/UCSC/mm9/GenomeStudio/Mus-Mus-Mus-Mus-Mus-Mus/mm9-tRNA\chrmu-mask.gtf | samtools视图-gre | x | |;1{h;rheader'-e'd}->${my_saf_file%.*}.cleaned3.saf很高兴它对您有效,但我仍然认为问题可能更清楚,另请参见您答案上留下的评论。这没有意义。我正要从UOOC开始,但实际上它是UOOS,对Sed的无用使用,因为它正是创建
cat
的目的:
cat rheader otherfile>myoutputfile
@EdMorton请看问题下面的注释:显然它是超长处理链的一部分。@BenjaminW。即使
cat otherfile
是一个管道命令链,这也是一个非常复杂的方法来预处理另一个文件的内容,而不是说,
cat otherfile | cat header->myoutputfile
@EdMorton,现在这是正确的解决方案。
cat header otherfile > myoutputfile
cat otherfile | cat header - > myoutputfile
$ cat file1
a
b
c

$ cat file2
foo
bar

$ cat file1 | cat file2 -
foo
bar
a
b
c