中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-29 19:05
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]如何从txt文件中提取我要的IP?[谢谢各位] 查看 1,515 回复 14
楼 主 [求助]如何从txt文件中提取我要的IP?[谢谢各位] 发表于 2007-03-09 02:41 ·  中国 辽宁 丹东 联通
初级用户
★★
积分 116
发帖 56
注册 2007-03-07 04:53
19年会员
UID 80966
性别 男
状态 离线
</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 ]
2 发表于 2007-03-09 02:50 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
19年会员
UID 63486
来自 河北廊坊
状态 离线
这种内容的处理,用sed比较好,还是请熟悉sed命令的同学来做吧。
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
3 发表于 2007-03-09 03:22 ·  中国 甘肃 张掖 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
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

只是量体裁衣,没有考虑太多的匹配
4 不知道帖子什么地方去了^ 发表于 2007-03-09 03:23 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
『楼 主』: 如何从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


结果:

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-03-10 00:20
5 发表于 2007-03-09 03:41 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
19年会员
UID 63486
来自 河北廊坊
状态 离线
在回收站里。不知怎么回事。
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
6 发表于 2007-03-09 03:51 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  因为楼主的原标题十分模糊,从标题无法迅速知晓帖子大概内容,所以被我移到回收站去了。经过楼主的修改,标题已经符合规范,因此移回,并合并了相关帖子。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
7 发表于 2007-03-09 06:11 ·  中国 辽宁 丹东 联通
初级用户
★★
积分 116
发帖 56
注册 2007-03-07 04:53
19年会员
UID 80966
性别 男
状态 离线
4楼是VBS?3楼sed似乎还不成~~~~bat就不成?
下午忙业务去了,没得闲上论坛来!
在这谢谢你们几位的帮助了!
8 发表于 2007-03-09 06:59 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  以下代码可以提取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 "^\.">nul&&echo %%i
set "str=%%j"
if defined str call :pickup "!str!"
)
goto :eof
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
3391617 +2 2007-03-10 00:20
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
9 发表于 2007-03-09 08:09 ·  中国 辽宁 丹东 联通
初级用户
★★
积分 116
发帖 56
注册 2007-03-07 04:53
19年会员
UID 80966
性别 男
状态 离线
对XXX.XXX.XXX.XXX:XX格式的的确好用
收下了
谢谢namejm!
10 发表于 2007-03-09 12:00 ·  中国 广东 清远 联通
高级用户
★★
积分 846
发帖 247
注册 2006-10-27 12:03
19年会员
UID 68504
性别 男
来自 湖南==》广东
状态 离线
借用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-03-10 00:21
11 发表于 2007-03-09 15:14 ·  美国 北达科他州立大学
初级用户
积分 94
发帖 46
注册 2006-05-14 01:59
20年会员
UID 55490
性别 男
状态 离线
这个问题前就有人问过啦,不过那个是在多行里的。

[ Last edited by clonecd on 2007-3-9 at 04:32 PM ]
12 发表于 2007-03-09 16:30 ·  美国 北达科他州立大学
初级用户
积分 94
发帖 46
注册 2006-05-14 01:59
20年会员
UID 55490
性别 男
状态 离线
@sed "s/class/\n&/g;s/<\/a>/&\n/g" 1.txt|sed "/:/!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 "/:/!d;s/.*\x22\(.*\)\x22>\(\+\)<.*/\2----\1/">2.txt

[ Last edited by clonecd on 2007-3-9 at 04:40 PM ]
13 发表于 2007-03-09 23:18 ·  中国 辽宁 丹东 联通
初级用户
★★
积分 116
发帖 56
注册 2007-03-07 04:53
19年会员
UID 80966
性别 男
状态 离线
上面的好象不好用哦~
有没有能从任意文档中提取出全部类似以下格式:
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 ]
14 发表于 2007-03-09 23:43 ·  中国 安徽 马鞍山 电信
中级用户
★★
积分 493
发帖 228
注册 2007-02-16 00:38
19年会员
UID 79596
性别 男
来自 安徽
状态 离线

if defined str call :pickup "!str!"


哪位能帮我解释一下?

我在if /?
看到:

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

IF 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 ]
15 发表于 2007-03-09 23:56 ·  美国 缅因州
初级用户
积分 94
发帖 46
注册 2006-05-14 01:59
20年会员
UID 55490
性别 男
状态 离线
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再研究吧。
论坛跳转: