求shell 脚本处理如下xml文本

时间:2022-07-04 21:06:41

<root>
    <pattern>
        <A></A>
        <B></B>
        <C></C>
    </pattern>
    <pattern>
        <C></C>      <!-- 顺序可能不一样 -->
        <A></A>
        <B></B>
    </pattern>
    <pattern>
        <A></A>
        <B></B>
        <C>1.0</C>   <!-- 只转换那些A,B,C之间全为空的 -->
    </pattern>
</root>


转换后:

<root>
    <pattern>
        <A>0</A>
        <B>0</B>
        <C>0</C>
    </pattern>
    <pattern>
        <C>0</C>      
        <A>0</A>
        <B>0</B>  
    </pattern>
    <pattern>
        <A></A>
        <B></B>
        <C>1.0</C> 
    </pattern>
</root>

7 个解决方案

#1


嗯,人气不行啊

#2


awk -vRS='pattern' '!/>\S+</{gsub(/></,">0<")}{printf $0RS}' test.xml

#3


awk把最后一个pattern中的含有1.0的A,B处都改了,不是预期的;
china unix上的回复:
sed -r '/<pattern>/{:1;N;/<\/pattern>/!b1;/>\S+</b;s/></>0</g}'

#4


引用 2 楼 ljc007 的回复:
awk -vRS='pattern' '!/>\S+</{gsub(/></,">0<")}{printf $0RS}' test.xml
2楼的awk真彪悍,佩服。

#5


引用
awk把最后一个pattern中的含有1.0的A,B处都改了,不是预期的;

awk的版本问题

#6


如果问题解决了,请点击左上角“结帖”按钮

#7


引用 6 楼 ljc007 的回复:
如果问题解决了,请点击左上角“结帖”按钮

不好意思,太忙没登陆,谢谢版主~

#1


嗯,人气不行啊

#2


awk -vRS='pattern' '!/>\S+</{gsub(/></,">0<")}{printf $0RS}' test.xml

#3


awk把最后一个pattern中的含有1.0的A,B处都改了,不是预期的;
china unix上的回复:
sed -r '/<pattern>/{:1;N;/<\/pattern>/!b1;/>\S+</b;s/></>0</g}'

#4


引用 2 楼 ljc007 的回复:
awk -vRS='pattern' '!/>\S+</{gsub(/></,">0<")}{printf $0RS}' test.xml
2楼的awk真彪悍,佩服。

#5


引用
awk把最后一个pattern中的含有1.0的A,B处都改了,不是预期的;

awk的版本问题

#6


如果问题解决了,请点击左上角“结帖”按钮

#7


引用 6 楼 ljc007 的回复:
如果问题解决了,请点击左上角“结帖”按钮

不好意思,太忙没登陆,谢谢版主~