中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教批处理修改文件内容问题【已解决】
作者:
标题: 请教批处理修改文件内容问题【已解决】 上一主题 | 下一主题
w61655
新手上路





积分 2
发帖 2
注册 2010-9-16
状态 离线
『楼 主』:  请教批处理修改文件内容问题【已解决】

文件a.ini原始结构:
<p1:Item>
    <p1:Key>CBP_514_SMDB</p1:Key>
    <p1:Type>Database</p1:Type>
    <p1:Database>
      <p1:Type>SMDB</p1:Type>
      <p1:SMDB>
        <p1:Host>10.71.110.175</p1:Host>
        <p1:Protocol>TELNET</p1:Protocol>
        <p1:Port>23</p1:Port>
        <p1:UID>smdb13</p1:UID>
        <p1:PWD>bGu7HJLDe7ib5QI0WJia2g==</p1:PWD>
        <p1:SysomcUID/>
        <p1:SysomcPWD>qmrOF5nY34i8yYrXmljISQ==</p1:SysomcPWD>
      </p1:SMDB>
    </p1:Database>
  </p1:Item>

目标结构:
<p1:Item>
    <p1:Key>CBP_514_SMDB</p1:Key>
    <p1:Type>Database</p1:Type>
    <p1:Database>
      <p1:Type>SMDB</p1:Type>
      <p1:SMDB>
        <p1:Host>10.71.110.175</p1:Host>
        <p1:Protocol>TELNET</p1:Protocol>
        <p1:Port>23</p1:Port>
        <p1:Protocol2>FTP</p1:Protocol2>
        <p1:Port2>21</p1:Port2>
        <p1:UID>smdb13</p1:UID>
        <p1:PWD>bGu7HJLDe7ib5QI0WJia2g==</p1:PWD>
        <p1:SysomcUID/>
        <p1:SysomcPWD>qmrOF5nY34i8yYrXmljISQ==</p1:SysomcPWD>
      </p1:SMDB>
    </p1:Database>
  </p1:Item>

即增加了如下两行:
<p1:Protocol2>FTP</p1:Protocol2>
<p1:Port2>21</p1:Port2>

增加的条件:
a.ini中有很多这样结构的item项,只有<p1:Type>为SMDB的项才增加。如果item本身中已经存在了这两行,也不需要增加

多谢

[ Last edited by w61655 on 2010-9-20 at 09:47 ]

2010-9-19 12:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
w61655
新手上路





积分 2
发帖 2
注册 2010-9-16
状态 离线
『第 2 楼』:  已经解决

用gawk来做,
BEGIN{ftp_flag=0;smdb_flag=0}{

        if ($0 ~ "<p1:Item>")
        {
                print $0  

                getline line
                print line
               
                while (line !~ "</p1:Item>")
                {
                        getline line
                        print line   
                       
                        while (line ~ "<p1:Type>SMDB</p1:Type>")
                        {
                                getline line
                                print line   

                                while (line !~ "</p1:SMDB>")
                                {
                                        smdb_flag=1
                                                                               
                                        lines[row]=line
                                        getline line
                                        row++

                                        if (line ~ "<p1:Protocol2>FTP</p1:Protocol2>" || line ~ "<p1:Protocol2>SFTP</p1:Protocol2>")
                                        {
                                                ftp_flag=1
                                        }
                                }
                               
                                if(smdb_flag=1)
                                {
                                        for(i=1;i<row;i++)
                                        {
                                                print lines[i]  
                                                if(lines[i] ~ "<p1:Port>" && ftp_flag==0)
                                                {
                                                        print "<p1:Protocol2>FTP</p1:Protocol2>"  
                                                        print "<p1:Port2>21</p1:Port2>"                                               
                                                }
                                        }
                                        print line
                                       
                                        ftp_flag=0
                                        smdb_flag=0
                                        delete lines
                                        row=0
                                }
                        }
                }
                next
        }
        print $0
}


2010-9-20 09:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: