Shell-Script
如何在文件中的某個字元串之後插入文件內容?
例如,我們有這個文件
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
用於編輯您可以看到自己在任何其他編輯器中打開的文件,即不是許多兆字節或千兆字節大小的文件。