【问题标题】:How To Insert File Contents After Line Match While Escaping Backslash如何在转义反斜杠时在行匹配后插入文件内容
【发布时间】:2017-10-12 17:17:11
【问题描述】:

我正在尝试使用在这里找到的代码:Insert contents of a file after specific pattern match

但是,当我在代码中添加反斜杠时,它不起作用。所以,然后,我按照这里的说明:Slash and backslash in sed 更改sed 中的分隔符。但是,当我这样做时,插入(应该是几行)变成了数千。

这是我的尝试:

sed ':<\tag>: r file1.txt' file2.txt

例子:

文件1.txt

Hello World 1
Hello World 2

文件2.txt:

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

期望的输出:

<thanks>
<tag>
<example>
<new>
<\new>
<\example>
<\tag>
Hello World 1
Hello World 2
<\thanks>

如果您能帮我在一行匹配后插入文件内容,同时转义反斜杠,我将不胜感激。

【问题讨论】:

    标签: linux bash unix awk sed


    【解决方案1】:

    试试这个

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

    我认为你交换了 file1 和 file2。

    【讨论】:

    • 我确实交换了 file1 和 2。现在正在修复它。但是,我没有得到那个输出:-(
    • 你还需要用另一个反斜杠转义反斜杠。
    • 是的,我之前试过 &lt;\\tag&gt;&lt;\\\tag&gt; 都对我不起作用
    • 没关系。我发现我的文件中有一行把它弄乱了。你说对了。它有效。
    【解决方案2】:

    也尝试使用以下 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
    

    【讨论】:

    • 嘿,Ravinder,我怎样才能修改它,让它在之前插入一行?
    • @DomainsFeatured,请检查我的第二个答案,然后告诉我情况如何。
    【解决方案3】:

    与您的其他问题的答案相同(请参阅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, 4th Edition》一书。

    【讨论】:

    • 听起来不错。会试试这个。再次感谢 Ed :-) ....而且,它有效!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 2011-08-06
    • 2012-10-03
    • 2015-03-29
    相关资源
    最近更新 更多