Text-Processing

用換行符和製表符替換 sed/awk 字元串

  • December 15, 2018

我有一個包含以下內容的 XML 文件:

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

目標是在一個命令中修改<ipaddr>192.168.1.1</ipaddr>to<ipaddr>192.168.1.125</ipaddr><subnet>24</subnet>to 。<subnet>25</subnet>我不想更改文件中的任何其他子網標籤。

我遇到的問題是後面有一個換行符,</ipaddr>前面有兩個製表符<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 但它不起作用。

有人可以為此指導我正確的方向嗎?

假設您要更改一行的 IP 和下一行的子網:

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

如果 IP 更改但子網未更改,則不會報告任何錯誤。從您的描述中,這似乎是您想要的。

這是一個相當不完整的規範。我們要搜尋什麼?一些通用模式?確切的 IP 地址和確切的子網?如果是,請嘗試

$ sed -r '/(192.168.1.)1/{s//\1125/; N; s/24/25/}' file
<ipaddr>192.168.1.125</ipaddr>
         <subnet>25</subnet>

引用自:https://unix.stackexchange.com/questions/486225