如何在线匹配后插入文件内容,同时转义反斜杠

时间:2017-10-12 17:17:11

标签: linux bash unix awk sed

我正在尝试使用我在此处找到的代码: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>

如果你能帮助我在线路匹配后插入文件内容,同时逃避反斜杠,我真的很感激。

3 个答案:

答案 0 :(得分:2)

试试这个

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

我认为您交换了file1和file2。

答案 1 :(得分:1)

尝试一次跟随awk。

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

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

DB.extend_datasets{def supports_timestamp_usecs?; false end}

答案 2 :(得分:1)

与您的其他问题相同(请参阅https://stackoverflow.com/a/46720002/1745001),只需在目标行之前而不是在目标行之前打印新记录:

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

我强烈推荐Arnold Robbins撰写的Effective Awk Programming,第4版。