Text-Processing

如何在模式(標記)之前將文件的內容插入到另一個文件中?

  • October 15, 2021

File1內容:

line1-file1      "1" 
line2-file1      "2"
line3-file1      "3" 
line4-file1      "4" 

File2內容:

line1-file2     "25"  
line2-file2     "24"  
Pointer-file2   "23"  
line4-file2     "22" 
line5-file2     "21"

perl/shell腳本執行後,File2內容應該變成:

line1-file2     "25"  
line2-file2     "24" 
line1-file1      "1" 
line2-file1      "2"
line3-file1      "3" 
line4-file1      "4" 
Pointer-file2   "23" 
line4-file2     "22" 
line5-file2     "21"

即在包含“指針”的行之前粘貼File1in的內容。File2

sed有一個功能,並且可以就地進行修改:

sed -i -e '/Pointer/r file1' file2

但這會將您的指針線放在 file1 上方。把它放在下面,延遲線輸出:

sed -n -i -e '/Pointer/r file1' -e 1x -e '2,${x;p}' -e '${x;p}' file2 

使用GNU sed

sed '/Pointer/e cat file1' file2

根據手冊_e [command]

請注意,與 r 命令不同,該命令的輸出將立即列印;相反, r 命令將輸出延遲到目前週期結束。

不使用sedor awk

首先,找到您的模式所在的行:

line=$(grep -n 'Pointer' file2 | cut -d ":" -f 1)

然後,使用 3 個命令輸出想要的結果:

{ head -n $(($line-1)) file2; cat file1; tail -n +$line file2; } > new_file

這具有訪問 3 次的缺點file2,但可能比sed解決方案更清楚awk

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