Text-Processing

XML 中的大替換

  • February 20, 2017

好的,所以我有這個 xml 文件。我需要用另一個文件(txt)中的值替換每個鍵值。兩個文件都被排序,所以第 20 行,即在 xml

<word key="ACTIVE" group="Service application" value="testvalue1"/>

在我的第二個文件中,第 20 行將是

testvalue2

我正在尋找將值從 testvalue1 更改為 testvalue2 的東西

這應該有效。

我們載入新的值文件,然後我們通過使用行號作為鍵將舊值替換為新值來處理 xml 文件。

awk 'FNR==NR{a[FNR]=$0;next}{$NF=gensub(/value=".*"\/>/,"value=\""a[FNR]"\"\/>","g",$NF);print}' file2 file
#OR working with regex groups:
awk 'FNR==NR{a[FNR]=$0;next}{$NF=gensub(/(value=")(.*)(".+)/,"\\1"a[FNR]"\\3","g",$NF);print}' file2 file

測試:

$ cat file
<word key="ACTIVE" group="Service application" value="testvalue1"/>                                                                                                             
<word key="ACTIVE" group="Service application" value="testvalue2"/>                                                                                                             
<word key="ACTIVE" group="Service application" value="testvalue3"/>                                                                                                             
<word key="ACTIVE" group="Service application" value="testvalue4"/>
<word key="ACTIVE" group="Service application" value=""/>

$ cat file2
newvalue1
newvalue2
newvalue3
newvalue4                                                                                                                          
newvalue5

$ awk 'FNR==NR{a[FNR]=$0;next}{$NF=gensub(/value=".*"\/>/,"value=\""a[FNR]"\"\/>","g",$NF);print}' file2 file
<word key="ACTIVE" group="Service application" value="newvalue1"/>
<word key="ACTIVE" group="Service application" value="newvalue2"/>
<word key="ACTIVE" group="Service application" value="newvalue3"/>
<word key="ACTIVE" group="Service application" value="newvalue4"/>
<word key="ACTIVE" group="Service application" value="newvalue5"/>

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