标题: 请教批处理修改文件内容问题【已解决】
[打印本页]
作者: 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[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
}