2016-09-22 88 views
0

我有一個文件,它看起來像這樣替換爲一個XML文件的內容sed的

<variable name="VOS_BRANCH"> 
    <name>VOS_BRANCH</name> 
    <type>string</type> 
    <value>cer_mainline</value> 
    </variable> 
    <variable name="VOS_BRANCH_LABEL"> 
    <name>VOS_BRANCH_LABEL</name> 
    <type>string</type> 
    <value>CER_FREEZE_12_0_0_98000_6_CCT</value> 
    </variable> 

所以現在在這裏,我想替換值CER_FREEZE_12_0_0_98000_6_CCT和cer_mainline給我傳遞的其他值參數給腳本。

我現在正在做的是

xml ed -u "/ENV_VARIABLES/variable[@name='VOS_BRANCH']/value" -v $new_branch_name $file > $file1 
mv $file1 $file 
xml ed -u "/ENV_VARIABLES/variable[@name='VOS_BRANCH_LABEL']/value" -v $new_branch_label $file > $file1 
mv $file1 $file 

但現在的要求是用sed來做這個操作。 ,我不知道如何使用SED這裏

+0

爲什麼你想用'sed'改變最好的方式來「不那麼有效」的方式? – Inian

+1

如果存在' cer_mainline'和' CER_FREEZE_12_0_0_98000_6_CCT'的不止一個實例,則'sed'不是有效的方法。任何'xml'感知工具將是理想的工具。 – Inian

+0

對於上述需求,Sed將非常脆弱(匹配支架,匹配標籤)。支持Xml的工具比較好。如果你想跳過xml-aware工具,下一個更好的選擇是perl。 – blackpen

回答

1

試試這個:

sed " 
    /<variable name=\"VOS_BRANCH\">/,/<\/variable>/ [email protected]<value>.*</value>@<value>$new_branch_name</value>@; 
    /<variable name=\"VOS_BRANCH_LABEL\">/,/<\/variable>/ [email protected]<value>.*</value>@<value>$new_branch_label</value>@ 
" "$file" 

這將寫入新的內容到終端。如果您滿意,可以像以前一樣添加> "$file1",也可以將-i選項添加到sed以便就地編輯該文件。

+0

工作..謝謝 – panda