亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標題: 使用shell腳本根據父子節(jié)點修改xml文件 [打印本頁]

作者: 哥哥_88    時間: 2016-08-16 13:49
標題: 使用shell腳本根據父子節(jié)點修改xml文件
現在有如下xml文件,想使用shell腳本進行修改,請問該如何修改。

<aaa>
    <AAA>
        <bbb>
             <ccc>Other text</ccc>
         </bbb>
        <ddd>
            <ccc>Modify text(這里是我想要修改的內容)</ccc>
        </ddd>
    </AAA>
    <BBB>
        <bbb>
             <ccc>Other text</ccc>
         </bbb>
        <ddd>
            <ccc>Other text</ccc>
        </ddd>
    <BBB>
</aaa>
作者: moperyblue    時間: 2016-08-16 14:12
本帖最后由 moperyblue 于 2016-08-16 15:13 編輯
  1. sed -r '/<AAA>/{:a;/<\/AAA>/!{N;ba};s/(<ddd>.*<ccc>)[^<]*/\1ok/}' file
復制代碼

作者: jason680    時間: 2016-08-16 14:59
回復 1# 哥哥_88

$ awk 'BEGIN{RS="<";FS=OFS=">"}function get_tag(){s=$1;d=sub("^/","",s)?-1:1;if(NF>1){c+=d;if(d>0)t[c]=s}s="";for(n=1;n<=c;++n)s=s"/"t[n];return(s)}{tag=get_tag();if(tag=="/aaa/AAA/ddd/ccc")$2="xxxx";printf $0RT}' xml
<aaa>
    <AAA>
        <bbb>
             <ccc>Other text</ccc>
         </bbb>
        <ddd>
            <ccc>xxxx</ccc>
        </ddd>
    </AAA>
    <BBB>
        <bbb>
             <ccc>Other text</ccc>
         </bbb>
        <ddd>
            <ccc>Other text</ccc>
        </ddd>
    <BBB>
</aaa>

   
作者: 哥哥_88    時間: 2016-08-16 16:11
回復 3# jason680


    大神,太厲害了,上一個問題也是你用perl腳本幫忙搞定,對你除了崇拜就只剩景仰了。
作者: 哥哥_88    時間: 2016-08-16 16:33
回復 3# jason680


    awk還是有這個問題:
        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <awk: (FILENAME=server.xml FNR=54) fatal: not enough arguments to satisfy format string
        `Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      <'
                                                                                                                                                                                  ^ ran out for this one

去網上查了,說是因為%的關系,論壇之前有人回復為“awk '{printf "%s", something}'”,可是不知道在這個語句中怎么修改。


作者: jason680    時間: 2016-08-16 22:56
本帖最后由 jason680 于 2016-08-16 22:57 編輯

回復 5# 哥哥_88

add some note in xml file

$ awk 'BEGIN{RS="<";FS=OFS=">"}function get_tag(){if($1~/^!--/)return(r);s=$1;d=sub("^/","",s)?-1:1;if(NF>1){c+=d;if(d>0)t[c]=s}r="";for(n=1;n<=c;++n)r=r"/"t[n];return(r)}{tag=get_tag();if(tag=="/aaa/AAA/ddd/ccc")$2="xxxx";printf "%s",$0RT}' xml
<aaa>
    <AAA>
    <!-- note1
       note2 ... -->

        <bbb>
             <ccc>Other text</ccc>
         </bbb>
        <ddd>
            <ccc>xxxx</ccc>
        </ddd>
    </AAA>
    <BBB>
        <bbb>
             <ccc>Other text</ccc>
         </bbb>
        <ddd>
            <ccc>Other text</ccc>
        </ddd>
    <BBB>
</aaa>

   
作者: 哥哥_88    時間: 2016-08-17 09:37
回復 6# jason680


    感謝,%的問題已經解決,但是我的如下文件沒修改成功,不知道是什么原因:

awk 'BEGIN{RS="<"}function get_tag(){s=$1;d=sub("^/","",s)?-1:1;if(NF>1){c+=d;if(d>0)t[c]=s}s="";for(n=1;n<=c;++n)s=s"/"t[n];return(s)}{tag=get_tag();if(tag=="/config/interface/system1/reqsystem/address")$2="xxxx";printf "%s",$0RT}' test.xml > tmp

<?xml version="1.0" encoding="utf-8"?>
<config>
        <interface>
                <!-- Security Center -->
                <system1>
                        <reqsystem>
                                <address>127.0.0.1</address>
                                <account>test</account>
                                <password>test</password>

                        </reqsystem>
                        <JK0001>
                                <api>myApiName1
                                </api>
                                <method>POST</method>
                                <desc>Test Interface</desc>
                        </JK0001>
                        <JK0002>
                                <api>myApiName2</api>
                                <method>POST</method>
                                <desc>Test Interface</desc>
                        </JK0002>
                </system1>

                <system2>
                        <reqsystem>
                                <address>127.0.0.1</address>
                                <account>test</account>
                                <password>test</password>

                        </reqsystem>
                        <JK0001>
                                <api>myApiName1
                                </api>
                                <method>POST</method>
                                <desc>Test Interface</desc>
                        </JK0001>
                        <JK0002>
                                <api>myApiName2</api>
                                <method>POST</method>
                                <desc>Test Interface</desc>
                        </JK0002>
                </system2>
        </interface>

        <sysServiceParams>
                <info>
                        <count>10</count>
                </info>
                <setting>
                        <about>About</about>
                </setting>
        </sysServiceParams>

</config>
作者: jason680    時間: 2016-08-17 12:39
回復 7# 哥哥_88

$ awk 'BEGIN{RS="<";FS=OFS=">"}function get_tag(){if($1~/^[^\/a-zA-Z0-9]/)return("");s=$1;d=sub("^/","",s)?-1:1;if(NF>1){c+=d;if(d>0)t[c]=s}r="";for(n=1;n<=c;++n)r=r"/"t[n];return(r)}{tag=get_tag();if(tag=="/config/interface/system1/reqsystem/address")$2="192.168.1.1";printf "%s",$0RT}' test.xml > tmp.xml


$ diff test.xml tmp.xml
7c7
<                                 <address>127.0.0.1</address>
---
>                                 <address>192.168.1.1</address>

   
作者: 哥哥_88    時間: 2016-08-17 14:29
回復 8# jason680


    看到改動點了,雖然看不大懂,但是問題完美解決了,非常感謝。!




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2