在多行正则表达式匹配后插入行

use*_*235 5 xml text-processing regular-expression

我有一个 XML 文件,我需要将其附加到一组特定的标签之后。基本上文件结构如下所示:

<key>servers</key>
<dict>
... Server Details ...
</dict>
Run Code Online (Sandbox Code Playgroud)

我想匹配的行:

<key>servers</key>
<dict>
Run Code Online (Sandbox Code Playgroud)

并在 之后附加一段 XML 指定服务器连接<dict>。我在它自己的文本文件中有新的 XML 块,因为它很长。

我已经看过sedawk要做到这一点,但我遇到了墙。我也看到了使用perl来完成这个的例子,但我对 Perl 不太熟悉。据我了解,虽然,sedawk都不是很大,在多匹配。

我需要进行多行匹配的原因是因为该<dict>标记在 XML 文件中经常使用,我需要将一个块附加到该<key>servers</key>部分,而不是替换其全部内容。

Sté*_*las 3

你可以这样做:

awk '{print}
     $0 == "<dict>" && previous == "<key>servers</key>" {
       system("cat other-file.xml")
     }
     {previous = $0}'
Run Code Online (Sandbox Code Playgroud)