首页 > 解决方案 > 在 LINUX/BASH 中另一个文件的特定行号处插入文件内容

问题描述


我有两个以下文件 - 'tempFile' 和 'File1'

临时文件

tempFile 01
tempFile 02
tempFile 03
tempFile 03

文件 1

File1
 @type ABCDF #---Insert 'tempfile' content below First occurrence '@type ABCDF'
File2
File3
 @type ABCDF
File4
 @type ABCDF
File5

我尝试使用以下脚本在第一次出现语句“@type ABCD”时将“tempFile”的内容插入另一个文件“File1”

lineNumber=$(grep -n -m 1 '@type ABCD' File1 | awk -F':'  '{print $1}' | head -1)
sed -i "${lineNumber}r tempFile" File1

但是,上面的脚本多次在 File1 中插入 tempFile 的内容,如下所述请帮我在 File1 中插入 tempFile 的内容一次/脚本生成以下输出

File1
 @type ABCDF #---Insert 'tempfile' content below First occurrence '@type ABCDF'
 tempFile 01
 tempFile 02
 tempFile 03
 tempFile 03

 tempFile 01
 tempFile 02
 tempFile 03
 tempFile 03

 tempFile 01
 tempFile 02
 tempFile 03
 tempFile 03

 tempFile 01
 tempFile 02
 tempFile 03
 tempFile 03

 tempFile 01
 tempFile 02
 tempFile 03
 tempFile 03

 tempFile 01
 tempFile 02
 tempFile 03
 tempFile 03
File2
File3
 @type ABCDF
File4
 @type ABCDF
File5

脚本的预期输出

File1
 @type ABCDF #---Insert 'tempfile' content below First occurrence '@type ABCDF'
 tempFile 01
 tempFile 02
 tempFile 03
 tempFile 03
File2
File3
 @type ABCDF
File4
 @type ABCDF
File5

标签: linuxshell

解决方案


这对我有用:

touch result                                                          #Intermediate file
lineNumber=$(grep -n -m 1 '@type ABCD' File1 | awk -F':'  '{print $1}' | head -1)
head -n $lineNumber File1 >> result                                   #First two lines
cat tempfile >> result                                                #Append your tempfile
sed -n "3,`wc -l File1 | awk ' { print $1}'`p" File1 >> result        #Rest of File1
mv result File1                                                       #Rename it to File1

推荐阅读