中国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
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: