【发布时间】:2015-04-01 03:02:41
【问题描述】:
我有一个配置文件,带有新的版本代码,比如 SAD10A_BNA_1234_123456_110011,这个数字写入 config.txt,这个数字我必须放在这个 xml 文件的 4 个位置。
这是我的脚本:
#!/bin/bash
NewNumber=`cat config.txt`
echo $NewNumber
#This number is: PLE31Z_BNE_1111_1121211_313131
awk '/"Parameter1"/ && !done++{sub(/Parameter1="[A-Z0-9]"/, "Parameter1=\"'$NewNumber'\"")}1' OldFileWithVersionNumeber.xml > temp.xml && mv -f temp.xml Newfile$NewNumber.xml
#I know, I must write 3 awk, but first one doesn't work for now
cat targettext.xml | grep Parameter1
带有旧参数的 XML:
<OneSection Parameter1="SAD10A_BNA_1234_123456_110011" Parameter2="SAD10A_BNA_1234_123456_110011" Type="UWE-AD" date="05/01/2011">
AND LOT OF VERY SIMILAR LINES
AND TWO LINES WITH THE SAME NUMBER TO REPLACE
<xmlElement Name="" name="NameGB" version="_SAD10A_BNA_1234_123456_110011.xml" Unit="ERF" Blocks="1" params1="" params2="" Path1="/rom/" path2="" comp="" encrypted="">
<xmlElement KeyName="" name="NameGB" version="_SAD10A_BNA_1234_123456_110011.xml" Unit="ERFS" Blocks="1" params1="" params2="" Path1="/rom/" path2="" comp="" encrypted="">
【问题讨论】:
-
在我看来
!done++的目的是将匹配限制在第一行。对吗? -
最好避免使用旧的和过时的背部抽动,使用括号:
NewNumber=$(cat config.txt)。也不要将cat与可以读取数据本身的程序一起使用:grep Parameter1 targettext.xml -
不要在
awk表达式中使用变量。看这里:stackoverflow.com/questions/19075671/…