Text-Processing
用換行符和製表符替換 sed/awk 字元串
我有一個包含以下內容的 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>