中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]如何从txt文件中提取我要的IP?[谢谢各位]
作者:
标题: [求助]如何从txt文件中提取我要的IP?[谢谢各位] 上一主题 | 下一主题
3391617
初级用户




积分 116
发帖 56
注册 2007-3-7
状态 离线
『楼 主』:  [求助]如何从txt文件中提取我要的IP?[谢谢各位]

</center><il><li><a title="AU" onMouseOver="s('AU')" onMouseOut="d()" class="D">144.140.22.190:80</a></li><li><a title="KR" onMouseOver="s('KR')" onMouseOut="d()" class="D">125.248.244.131:8080</a></li><li><a title="IN" onMouseOver="s('IN')" onMouseOut="d()" class="D">202.53.13.10:8080</a></li><li><a title="PH" onMouseOver="s('PH')" onMouseOut="d()" class="B">125.212.37.150:8080</a></li><li><a title="CN" onMouseOver="s('CN')" onMouseOut="d()" class="B">220.181.31.44:3128</a></li><li><a title="CO" onMouseOver="s('CO')" onMouseOut="d()" class="D">200-91-243-90-host.ifx.net.co:3128</a></li><li><a title="US" onMouseOver="s('US')" onMouseOut="d()" class="D">216.133.248.229:80</a></li><li><a title="US" onMouseOver="s('US')" onMouseOut="d()" class="D">216.133.248.228:80</a></li><li><a title="US" onMouseOver="s('US')" onMouseOut="d()" class="D">216.133.248.226:80</a></li><li><a title="JP" onMouseOver="s('JP')" onMouseOut="d()" class="D">neptun.ium.ne.jp:8094</a></li><li><a title="TR" onMouseOver="s('TR')" onMouseOut="d()" class="D">195.175.37.71:8080</a></li><li><a title="NL" onMouseOver="s('NL')" onMouseOut="d()" class="D">213.227.149.165:3128</a></li><li><a title="US" onMouseOver="s('US')" onMouseOut="d()" class="D">216.133.248.227:80</a></li></il><center>

以上内容(都是同1行里的,不是现在看到的多行)为文档1.txt,请教我如何可以从1.txt中提取出里面的
144.140.22.190:80
xxx.xxx.xxx.xxx:xx
xxx.xxx.xxx.xxx:xx
...
...
...
xxx.xxx.xxx.xxx:xx
到新建的另一个2.txt中呢?

最好能把class后的类型属性也提取出来,例如这样
144.140.22.190:80----D
xxx.xxx.xxx.xxx:xx
xxx.xxx.xxx.xxx:xx
220.181.31.44:3128----B
...
...
xxx.xxx.xxx.xxx:xx

先谢谢了!

[ Last edited by 3391617 on 2007-3-9 at 10:18 AM ]

2007-3-9 02:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 2 楼』:  

sedsed



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2007-3-9 02:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 3 楼』:  

sed -r "s/>[^<>]*<\/a>/&\n/g" 1.txt|sed -r "s/.*class=\x22([A-Z]{1})\x22>([^<>]*)<\/a>$/\2--\1/;/--([A-Z]{1})$/!d"|more>2.txt

只是量体裁衣,没有考虑太多的匹配

2007-3-9 03:22
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 4 楼』:  不知道帖子什么地方去了^

『楼 主』:  [求助]如何从txt文件中提取我想要的内容?

</center><il><li><a title="AU" onMouseOver="s('AU')" onMouseOut="d()" class="D">144.140.22.190:80</a></li><li><a title="KR" onMouseOver="s('KR')" onMouseOut="d()" class="D">125.248.244.131:8080</a></li><li><a title="IN" onMouseOver="s('IN')" onMouseOut="d()" class="D">202.53.13.10:8080</a></li><li><a title="PH" onMouseOver="s('PH')" onMouseOut="d()" class="B">125.212.37.150:8080</a></li><li><a title="CN" onMouseOver="s('CN')" onMouseOut="d()" class="B">220.181.31.44:3128</a></li><li><a title="CO" onMouseOver="s('CO')" onMouseOut="d()" class="D">200-91-243-90-host.ifx.net.co:3128</a></li><li><a title="US" onMouseOver="s('US')" onMouseOut="d()" class="D">216.133.248.229:80</a></li><li><a title="US" onMouseOver="s('US')" onMouseOut="d()" class="D">216.133.248.228:80</a></li><li><a title="US" onMouseOver="s('US')" onMouseOut="d()" class="D">216.133.248.226:80</a></li><li><a title="JP" onMouseOver="s('JP')" onMouseOut="d()" class="D">neptun.ium.ne.jp:8094</a></li><li><a title="TR" onMouseOver="s('TR')" onMouseOut="d()" class="D">195.175.37.71:8080</a></li><li><a title="NL" onMouseOver="s('NL')" onMouseOut="d()" class="D">213.227.149.165:3128</a></li><li><a title="US" onMouseOver="s('US')" onMouseOut="d()" class="D">216.133.248.227:80</a></li></il><center>

以上内容(都是同1行里的,不是现在看到的多行)为文档1.txt,请教我如何可以从1.txt中提取出里面的
144.140.22.190:80
xxx.xxx.xxx.xxx:xx
xxx.xxx.xxx.xxx:xx
...
...
...
xxx.xxx.xxx.xxx:xx
到新建的另一个2.txt中呢?

最好能把class后的类型属性也提取出来,例如这样
144.140.22.190:80----D
xxx.xxx.xxx.xxx:xx
xxx.xxx.xxx.xxx:xx
220.181.31.44:3128----B
...
...
xxx.xxx.xxx.xxx:xx

先谢谢了!

刚看的啊,3月8日的!不知道跑什么地方去了^
Set objFSO = CreateObject("Scripting.FileSystemObject")

Set objText = objFSO.OpenTextFile("D:\桌面\1.txt", 1)
inputstr = objText.ReadAll
objText.Close
outstr=replace(inputstr,"</a>",vbcrlf)
dim tep
tep=split(outstr,vbcrlf)
outstr=empty
dim i
for i=0 to ubound(tep)-2
outstr=outstr & right(tep(i),len(tep(i))-instrRev(tep(i),">")+3) & vbcrlf
next
outstr=replace(outstr,""">","--")


Set objText = objFSO.OpenTextFile("D:\桌面\2.txt", 2,True)
objText.Write outstr
objText.Close
结果:

  Quote:
D--144.140.22.190:80
D--125.248.244.131:8080
D--202.53.13.10:8080
B--125.212.37.150:8080
B--220.181.31.44:3128
D--200-91-243-90-host.ifx.net.co:3128
D--216.133.248.229:80
D--216.133.248.228:80
D--216.133.248.226:80
D--neptun.ium.ne.jp:8094
D--195.175.37.71:8080
D--213.227.149.165:3128
D--216.133.248.227:80



   此帖被 +1 点积分    点击查看详情   
评分人:【 3391617 分数: +1  时间:2007-3-10 00:20


2007-3-9 03:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 5 楼』:  

在回收站里。不知怎么回事。



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2007-3-9 03:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 6 楼』:  

  因为楼主的原标题十分模糊,从标题无法迅速知晓帖子大概内容,所以被我移到回收站去了。经过楼主的修改,标题已经符合规范,因此移回,并合并了相关帖子。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-3-9 03:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
3391617
初级用户




积分 116
发帖 56
注册 2007-3-7
状态 离线
『第 7 楼』:  

4楼是VBS?3楼sed似乎还不成~~~~bat就不成?
下午忙业务去了,没得闲上论坛来!
在这谢谢你们几位的帮助了!

2007-3-9 06:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 8 楼』:  

  以下代码可以提取IP格式的记录,但是,不能提取到类型属性:
@echo off
setlocal enabledelayedexpansion

cls
for /f "delims=" %%i in (1.txt) do (
    set "str=%%i"
    set "str=!str:"=!"
    call :pickup "!str!"
)
pause
exit

:pickup
for /f "tokens=1* delims=<>" %%i in (%1) do (
    echo %%i|findstr "^[1-2][0-9][0-9]\.">nul&&echo %%i
    set "str=%%j"
    if defined str call :pickup "!str!"
)
goto :eof


   此帖被 +2 点积分    点击查看详情   
评分人:【 3391617 分数: +2  时间:2007-3-10 00:20




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-3-9 06:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
3391617
初级用户




积分 116
发帖 56
注册 2007-3-7
状态 离线
『第 9 楼』:  

对XXX.XXX.XXX.XXX:XX格式的的确好用
收下了
谢谢namejm!

2007-3-9 08:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
youxi01
高级用户




积分 846
发帖 247
注册 2006-10-27
来自 湖南==》广东
状态 离线
『第 10 楼』:  

借用namejm的代码,可以提取IP格式的记录和类型属性:
@echo off
setlocal enabledelayedexpansion

for /f "delims=" %%i in (test.txt) do (
    set "str=%%i"
    set "str=!str:"=!"
    call :pickup "!str!"
)
pause>nul

:pickup
for /f "tokens=1* delims=<" %%i in (%1) do (
    echo "%%i"|findstr "class">nul && (
        for /f "tokens=1,2 delims=>" %%a in ("%%i") do (
           set class=%%a
           set class=!class:~-1!
           set IP=%%b
           echo !class!--!IP!
          )
        )
    set "str=%%j"
    if defined str call :pickup "!str!"
)

goto :eof
结果:
D--144.140.22.190:80
D--125.248.244.131:8080
D--202.53.13.10:8080
B--125.212.37.150:8080
B--220.181.31.44:3128
D--200-91-243-90-host.ifx.net.co:3128
D--216.133.248.229:80
D--216.133.248.228:80
D--216.133.248.226:80
D--neptun.ium.ne.jp:8094
D--195.175.37.71:8080
D--213.227.149.165:3128
D--216.133.248.227:80


   此帖被 +1 点积分    点击查看详情   
评分人:【 3391617 分数: +1  时间:2007-3-10 00:21


2007-3-9 12:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
clonecd
初级用户





积分 94
发帖 46
注册 2006-5-14
状态 离线
『第 11 楼』:  

这个问题前就有人问过啦,不过那个是在多行里的。

[ Last edited by clonecd on 2007-3-9 at 04:32 PM ]

2007-3-9 15:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
clonecd
初级用户





积分 94
发帖 46
注册 2006-5-14
状态 离线
『第 12 楼』:  

@sed "s/class/\n&/g;s/<\/a>/&\n/g" 1.txt|sed "/[0-9]:/!d;s/.*\x22\(.*\)\x22>\([^<]\+\)<.*/\2----\1/">2.txt
以上是不包含200-91-243-90-host.ifx.net.co:3128----D
如果需要这一行,请用以下代码
sed "s/class/\n&/g;s/<\/a>/&\n/g" 1.txt|sed "/:[0-9]/!d;s/.*\x22\(.*\)\x22>\([^<]\+\)<.*/\2----\1/">2.txt

[ Last edited by clonecd on 2007-3-9 at 04:40 PM ]

2007-3-9 16:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
3391617
初级用户




积分 116
发帖 56
注册 2007-3-7
状态 离线
『第 13 楼』:  

上面的好象不好用哦~
有没有能从任意文档中提取出全部类似以下格式:
XXX.XXX.XXX.XXX:XX
XXX.XXX.XXX.XX:XXXX
XX.XXX.XX.XXX:XXX
XX.XXX.XXX.XX:XXXX
or格式:
XXX.XX.XXX.XXX--XX
XXX.XXX.XXX.XXX--XXXX
XX.XXX.XX.XXX--XXX
XX.XXX.XXX.XX--XX
的所有IP地址的通用方法呢?
在同一行/不在同一行?

[ Last edited by 3391617 on 2007-3-9 at 10:23 AM ]

2007-3-9 23:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xycoordinate
中级用户




积分 493
发帖 228
注册 2007-2-16
来自 安徽
状态 离线
『第 14 楼』:  



  Quote:
if defined str call :pickup "!str!"

哪位能帮我解释一下?

我在if /?
看到:

  Quote:
如果命令扩展名被启用,IF 会如下改变:

    IF [/I] string1 compare-op string2 command
    IF CMDEXTVERSION number command
    IF DEFINED variable command


如果已定义环境变量,DEFINED 条件的作用跟 EXISTS 的一样,
除了它取得一个环境变量,返回的结果是 true。

如果没有已定义环境变量,那就不执行后面的command???

[ Last edited by xycoordinate on 2007-3-9 at 10:51 AM ]

2007-3-9 23:43
查看资料  发送邮件  发短消息 网志  OICQ (226308607)  编辑帖子  回复  引用回复
clonecd
初级用户





积分 94
发帖 46
注册 2006-5-14
状态 离线
『第 15 楼』:  



  Quote:
Originally posted by 3391617 at 2007-3-9 23:18:
上面的好象不好用哦~
有没有能从任意文档中提取出全部类似以下格式:
XXX.XXX.XXX.XXX:XX
XXX.XXX.XXX.XX:XXXX
XX.XXX.XX.XXX:XXX
XX.XXX.XXX.XX:XXXX
or格式: ...

12楼的代码是针对你1楼给出的条件来写的,要考虑你13楼附加的条件用sed也是完全可以做到的,你自己学习sed再研究吧。

2007-3-9 23:56
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: