2016-09-22 109 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