Shell-Script

如何在文件中的某個字元串之後插入文件內容?

  • May 28, 2018

例如,我們有這個文件

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

您幾乎從不想將文件的完整內容儲存在 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“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

使用ed(呼叫sed插入文件的縮進)。這也會對文件進行就地編輯,並用修改後的內容替換原始文件。

ed -s exam.txt <<END_ED
/propertie/r !sed 's/^/    /' file.txt
wq
END_ED

如果命令以 . 為前綴,則r命令 ined能夠讀取外部命令的輸出!。我們使用它來縮進我們想要插入的數據。否則,出於明顯的原因,與上述解決方案非常相似sed

using 的唯一缺點ed是您通常不能在非常大的文件上使用它。 sed用於編輯未確定長度的流,而ed用於編輯您可以看到自己在任何其他編輯器中打開的文件,即不是許多兆字節或千兆字節大小的文件。

引用自:https://unix.stackexchange.com/questions/446527