匹配模式并将匹配行替换为同一文件中的下一个匹配行

时间:2018-02-20 07:14:20

标签: xml awk sed

我的xml低于

  <?xml version="1.0" encoding="UTF-8"?>
    <testsuites name ="first node"><!-- Firstnode testsuites -->
      <testsuite name ="first node"> <!-- firstnode testsuite -->
        <properties>
            <property name="assert-passed" value="1"/>
        </properties>
        <testcase  time="10">
        </testcase>
    <testsuite name ="second node" > <!-- secondnode testsuite -->
        <properties>
            <property name="assert-passed" value="1"/>
        </properties>
        <testcase  time="10">
        </testcase>
        <testcase   time="10">
        </testcase>
    <testsuite name ="third node"> <!-- thirdnode testsuite -->
        <properties>
            <property name="assert-passed" value="1"/>
        </properties>
        <testcase time="10">
            <failure  type="failure">
            unknown error</failure>
        </testcase>
        <testsuite name ="fourth node" > <!-- fourthnode testsuite -->
    </testsuite>
        <testsuites name ="second node" > <!-- secondnode testsuites -->
    </testsuites>

有节点

  

测试包

  

测试包

我想做的是

  1. 删除 testsuites 的第一个匹配节点,然后替换为 testsuites的下一个匹配节点

  2. 删除第一个匹配节点并替换为 第二个匹配节点 testsuites ,第二个匹配第三个等

  3. 基本上想要用以下节点替换节点。期望的结果是

      <?xml version="1.0" encoding="UTF-8"?>
       <testsuites name ="second node" > <!--secondnode testsuites -->
          <testsuite name ="second node" > <!-- secondnode testsuite -->
            <properties>
                <property name="assert-passed" value="1"/>
            </properties>
            <testcase  time="10">
            </testcase>
        <testsuite name = "third node"> <!-- thirdnode testsuite -->
            <properties>
                <property name="assert-passed" value="1"/>
            </properties>
            <testcase  time="10">
            </testcase>
            <testcase   time="10">
            </testcase>
        <testsuite name = "fourth node" > <!-- fourthnode testsuite -->
            <properties>
                <property name="assert-passed" value="1"/>
            </properties>
            <testcase time="10">
                <failure  type="failure">
                unknown error</failure>
            </testcase>
            </testsuite>
    
                </testsuites>
    

    我正在使用下面的awk命令

    awk '{
        if($0~/<testsuite errors/)
        {
            a=$0;
            print $0;
            print "firstmatch";
                getline;
                b=$0;
                if(b~/<testsuite errors/)
                {
                print "iamher";
                print b;
                a==b;
                print a;
                }
            #print a;
        }
        else
        {
        #print $0
        }
    }' 
    

    这一个输出,但如果我交换线路,不进入内部。 我在瞎扯什么

0 个答案:

没有答案