2017-10-12 77 views
0

我试图使用的代码,我发现这里:Insert contents of a file after specific pattern match如何插入文件的内容线路赛后当逃脱反斜杠

然而,当我添加一个反斜杠代码,这是行不通的。那么,我按照这里的说明:Slash and backslash in sed更改sed中的分隔符。但是,当我这样做时,插入(应该是几行)会变成数千。

这里是我的尝试:

sed ':<\tag>: r file1.txt' file2.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> 
<\tag> 
Hello World 1 
Hello World 2 
<\thanks> 

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

回答

2

试试这个

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

我想你交换文件1和文件2。

+0

我做了交换file1和2.现在修复。但是,我没有得到那个输出:-( – DomainsFeatured

+0

你还需要用另一个反斜杠来转义反斜线。 – karakfa

+0

是的,我已经试过'<\\tag>'和'<\\\tag>'前两个都不适合我 – DomainsFeatured

1

请尝试使用以下awk一次。

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

要将输出保存到File.txt本身,以下内容可能会对您有所帮助。

awk '/<\\tag>/{print;system("cat File2.txt");next} 1' File.txt > temp_file && mv temp_file File.text 
+0

This works。Thanks Ravinder – DomainsFeatured

+0

嘿Ravinder,我怎么修改它,以便它插入一行之前? – DomainsFeatured

+0

@DomainsFeatured,请检查我的第二个回答并让我知道它是怎么回事 – RavinderSingh13

1

相同的答案您的其他问题(见https://stackoverflow.com/a/46720002/1745001),只打印新纪录之后,而不是在目标前行:

awk 'FNR==NR{n=n ORS $0; next} /<\\tag>/{$0=$0 n} 1' file1 file2 

我强烈推荐这本书有效AWK编程,第4版,由阿诺德罗宾斯。

+1

听起来很棒,请试试这个,再次感谢Ed :-) ....并且,它的工作原理! – DomainsFeatured