複数行の正規表現一致後の行の挿入

複数行の正規表現一致後の行の挿入

特定のタグセットに追加する必要があるXMLファイルがあります。デフォルトでは、ファイル構造は次のとおりです。

<key>servers</key>
<dict>
... Server Details ...
</dict>

次の行を一致させたい。

<key>servers</key>
<dict>

次に、サーバー接続を指定するXMLブロックを追加します<dict>。新しいXMLチャンクはかなり長いので、独自のテキストファイルに入れました。

悩んsedawkみましたが、悩みになりました。これを行うためにPerlを使用する例も見ましたが、perlPerlに精通していません。私が知っている限り、sedそれはawkマルチラインマッチングには良くありません。

複数行の一致を実行する理由は、このタグがXMLファイルで頻繁に使用され、内容全体を置き換えるのではなく、そのセクションにブロックを追加する必要があるため<dict>です。<key>servers</key>

ベストアンサー1

次のことができます。

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

おすすめ記事