Board logo

标题: [求助]如何从txt文件中提取我要的IP?[谢谢各位] [打印本页]

作者: 3391617     时间: 2007-3-9 02:41    标题: [求助]如何从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 ]
作者: ccwan     时间: 2007-3-9 02:50
sedsed
作者: vkill     时间: 2007-3-9 03:22
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

只是量体裁衣,没有考虑太多的匹配
作者: slore     时间: 2007-3-9 03:23    标题: 不知道帖子什么地方去了^

『楼 主』:  [求助]如何从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


作者: ccwan     时间: 2007-3-9 03:41
在回收站里。不知怎么回事。
作者: namejm     时间: 2007-3-9 03:51
  因为楼主的原标题十分模糊,从标题无法迅速知晓帖子大概内容,所以被我移到回收站去了。经过楼主的修改,标题已经符合规范,因此移回,并合并了相关帖子。
作者: 3391617     时间: 2007-3-9 06:11
4楼是VBS?3楼sed似乎还不成~~~~bat就不成?
下午忙业务去了,没得闲上论坛来!
在这谢谢你们几位的帮助了!
作者: namejm     时间: 2007-3-9 06:59
  以下代码可以提取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

作者: 3391617     时间: 2007-3-9 08:09
对XXX.XXX.XXX.XXX:XX格式的的确好用
收下了
谢谢namejm!
作者: youxi01     时间: 2007-3-9 12:00
借用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

作者: clonecd     时间: 2007-3-9 15:14
这个问题前就有人问过啦,不过那个是在多行里的。

[ Last edited by clonecd on 2007-3-9 at 04:32 PM ]
作者: clonecd     时间: 2007-3-9 16:30
@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 ]
作者: 3391617     时间: 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格式:
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 ]
作者: xycoordinate     时间: 2007-3-9 23:43


  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 ]
作者: clonecd     时间: 2007-3-9 23:56


  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再研究吧。