例如我们有这个文件
cat exam.txt
I am expert linux man
what we can do for out country
I love redhat machine
"propertie"
centos less then redhat
fedore what
my name is moon yea
我们想在属性行之后添加任何文件的内容作为 file.txt
cat file.txt
324325
5326436
3245235
646346
545
643
6436
63525
664
46454
所以我尝试以下操作:
a=` cat file `
sed -i '/propertie/a `echo "$a"` ' exam.txt
但不起作用
有没有关于 sed/awk/perl 一个衬垫的建议,以便在特定字符串后添加文件内容?
预期产出
I am expert linux man
what we can do for out country
I love redhat machine
"propertie"
324325
5326436
3245235
646346
545
643
6436
63525
664
46454
centos less then redhat
fedore what
my name is moon yea
答案1
您几乎不想将文件的完整内容存储在 Unix shell 脚本的变量中。如果您发现自己这样做,请问问自己是否还有其他解决方案。如果您自己找不到,请来这里,我们会看看:-)
$ sed '/propertie/r file.txt' exam.txt
I am expert linux man
what we can do for out country
I love redhat machine
"propertie"
324325
5326436
3245235
646346
545
643
6436
63525
664
46454
centos less then redhat
fedore what
my name is moon yea
r
in 中的 ("read") 命令采用sed
文件名作为其参数,并将文件的内容插入到当前流中。
file.txt
如果需要缩进添加的内容,请确保在运行之前缩进内容sed
:
$ sed 's/^/ /' file.txt >file-ind.txt
$ sed '/propertie/r file-ind.txt' exam.txt
I am expert linux man
what we can do for out country
I love redhat machine
"propertie"
324325
5326436
3245235
646346
545
643
6436
63525
664
46454
centos less then redhat
fedore what
my name is moon yea
With ed
(要求sed
插入文件的缩进)。这也会对文件进行就地编辑,并用修改后的内容替换原始文件。
ed -s exam.txt <<END_ED
/propertie/r !sed 's/^/ /' file.txt
wq
END_ED
r
如果命令以 为前缀,则in 命令能够ed
读取外部命令的输出!
。我们用它来缩进我们想要插入的数据。由于显而易见的原因,它在其他方面与sed
上面的解决方案非常相似。
使用的唯一缺点ed
是通常不能在非常大的文件上使用它。 sed
用于编辑未确定长度的流,而ed
可以编辑您可以在任何其他编辑器中打开的文档,即大小不是许多兆字节或千兆字节的文件。