插入文件内容一行前匹配而转义反斜杠

我最近问了一个类似的问题如何在线路匹配时插入文件内容,同时转义反斜杠只意识到我需要做相反的事情。

使用这个问题的代码,我试过了:

sed '/<\\tag>/i file2' file1 

第二次尝试:

 awk '/<\\tag>/{print;system("cat File2.txt");before} 1' File1.txt 

但是,我无法在比赛前插入一行。

例:

FILE1.TXT

 Hello <[World!]> 1 Hello <[World!]> 2 

FILE2.TXT:

 <thanks> <tag> <example> <new> <\new> <\example> <\tag> <\thanks> 

期望的输出:

 <thanks> <tag> <example> <new> <\new> <\example> Hello <[World!]> 1 Hello <[World!]> 2 <\tag> <\thanks> 

如果你可以请帮我插入文件内容后一行匹配转义反斜杠,我真的很感激。

 $ awk 'FNR==NR{n=n $0 ORS; next} /<\\tag>/{$0=n $0} 1' file1 file2 <thanks> <tag> <example> <new> <\new> <\example> Hello <[World!]> 1 Hello <[World!]> 2 <\tag> <\thanks> 

在你的awk解决方案中,你需要做以下的改变:
1.交换文件名称,因为您必须在File2.txt上工作并打印找到匹配的File1.txt内容。
2.取下print; 在awk中,因为您不想在输出中打印两次<\tag>
3.在awk中没有关键字。 请删除它。

 awk '/<\\tag>/{system("cat File1.txt");} 1' File2.txt 

其他可能的解决方案是

 $ awk 'FNR==NR{f1[++i]=$0; l=i; next} /<\\tag>/{ for(i=1; i<=l; i++) print f1[i]}1' File1.txt File2.txt <thanks> <tag> <example> <new> <\new> <\example> Hello <[World!]> 1 Hello <[World!]> 2 <\tag> <\thanks> 

FNR==NR{f1[$0]=$0; next} FNR==NR{f1[$0]=$0; next}在数组f1存储File1.txt的内容
/<\\tag>/{ for(i in f1) print f1[i]} :如果找到匹配项,则遍历File2.txt ,然后打印数组内容。