Text-Processing
如何在模式(標記)之前將文件的內容插入到另一個文件中?
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"
即在包含“指針”的行之前粘貼
File1
in的內容。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 命令將輸出延遲到目前週期結束。
不使用
sed
orawk
。首先,找到您的模式所在的行:
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
。