改行文字とタブでsed / awk文字列を置き換える

改行文字とタブでsed / awk文字列を置き換える

次の内容を含むXMLファイルがあります。

<ipaddr>192.168.1.1</ipaddr>
    <subnet>24</subnet>

目的は、1つのコマンドで<ipaddr>192.168.1.1</ipaddr>to<ipaddr>192.168.1.125</ipaddr>とtoを変更することです<subnet>24</subnet><subnet>25</subnet>ファイル内の他のサブネットタグを変更したくありません。

私が経験している問題は、後ろに改行文字があり、</ipaddr>その前に2つのタブ文字があることです<subnet>

私はこれを試しましたが、awk '{gsub (/<ipaddr>192.168.1.1<\/ipaddr>\n<subnet>24<\/subnet>/, "<ipaddr>192.168.1.125<\/ipaddr>\n\t\t<subnet>25<\/subnet>")}' config.xml うまくいきません。

誰かが私に正しい方向を教えてもらえますか?

ベストアンサー1

1行ではIPを変更し、次の行ではサブネットを変更するとします。

 sed -E '/(192.168.1.)1/{s//\1125/; n; s/>24</>25</}' infile

IPは変更されますが、サブネットは変更されない場合、エラーは報告されません。あなたの説明によると、これはあなたが望むようです。

おすすめ記事