Board logo

标题: 请教批处理修改文件内容问题【已解决】 [打印本页]

作者: w61655     时间: 2010-9-19 12:18    标题: 请教批处理修改文件内容问题【已解决】
文件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 ]

作者: w61655     时间: 2010-9-20 09:45    标题: 已经解决
用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=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
if(lines ~ "<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
}