标题: [文本处理] [已解决]批处理for命令如何提取文本文件中的IP? [打印本页]
作者: qwertl 时间: 2009-12-16 20:08 标题: [已解决]批处理for命令如何提取文本文件中的IP?
从IE另存为txt的格式为:
日期时间 主机名 IP地址 HTTP FTP
2009-12-15 17:21:28 1000 123.87.15.51 HTTP FTP
2009-12-15 12:44:38 pc-20 159.37.209.86 HTTP FTP
2009-12-15 00:30:24 ahjoe 58.251.97.66 HTTP FTP
2009-12-13 23:53:03 pc-200910180928 226.4.12.132 HTTP FTP
保存为以上时用下面的for语句可以获取主机名为ahjoe的ip:- for /f "tokens=4" %%i in ('findstr /i ahjoe c:\bat\ipload\1.txt') do set ip=%%i
复制代码
但用htmlastext.exe 转换后txt的格式后多了两个 íí 符号,用以上for语句获取IP会有íí,怎样修改for语句可以剔除这两个íí???
2009-12-16 19:42:22íí pc-200910180928íí 121.13.29.23íí HTTP FTP
2009-12-16 19:39:06íí pc-20091118qufgíí 111.165.5.52íí HTTP FTP
2009-12-15 18:27:48íí a01íí 118.118.208.136íí HTTP FTP
2009-12-15 18:06:50íí 1000íí 112.113.3.225íí HTTP FTP
2009-12-15 00:33:29íí ahjoeíí 58.251.97.66íí HTTP FTP
2009-12-14 14:42:37íí home-pcíí 58.250.94.107íí HTTP FTP
[ 本帖最后由 qwertl 于 2009-12-17 21:51 编辑 ]
作者: hanzinu 时间: 2009-12-16 20:43 标题: 回复 1楼 的帖子
把这个íí符合作为切分符应该可以。
作者: qwertl 时间: 2009-12-16 21:35
这个符号不行作不了分隔符
作者: Batcher 时间: 2009-12-16 22:18
用set命令做字符串截取吧
作者: qwertl 时间: 2009-12-16 22:31
C:\bat>htmlastext.exe /run "c:\bat\h2t.cfg"
C:\bat>for /F "tokens=4" %i in ('findstr /i ahjoe c:\bat\ipload\1.txt'
) do set ip=%i
C:\bat>set ip=16.78.166.76íí
怎样用set去掉íí?
[ 本帖最后由 qwertl 于 2009-12-16 22:51 编辑 ]
作者: Batcher 时间: 2009-12-16 22:40 标题: 回复 5楼 的帖子
运行的哪个代码?
作者: qwertl 时间: 2009-12-16 23:05
这字符在dos 下用type才显示出,在记事本下打开是没有的。
作者: Batcher 时间: 2009-12-16 23:14
- @echo off
- for /f "tokens=4 delims= " %%i in ('findstr /i ahjoe c:\bat\ipload\1.txt') do (
- set ip=%%i
- setlocal enabledelayedexpansion
- set ip=!ip:~0,-2!
- echo !ip!
- endlocal
- )
复制代码
作者: qwertl 时间: 2009-12-16 23:28
谢谢!测试了下还是去不掉这两个符号。
执行结果:
C:\bat>for /F "tokens=4 delims= " %i in ('findstr /i ahjoe c:\bat\ipload\1.txt')
do (
set ip=%i
setlocal enabledelayedexpansion
set ip=!ip:~0,-2!
echo !ip!
endlocal
)
C:\bat>rem for /f "tokens=4" %i in ('findstr /i ahjoe c:\bat\ipload\1.
txt') do set ip=%i
C:\bat>pause
Press any key to continue . . .
C:\bat>sed -i "s/\(HostRestrictions=.*\\\/\).*/\1116.18.166.76íí/g" "C:\bat\e.ini" 这行的%ip%就有这个怪符号了
C:\bat>
[ 本帖最后由 qwertl 于 2009-12-16 23:36 编辑 ]
作者: Batcher 时间: 2009-12-16 23:29 标题: 回复 9楼 的帖子
能否把c:\bat\ipload\1.txt压缩一下,然后以附件的形式传上来看看?
作者: qwertl 时间: 2009-12-17 00:07
明天研究了,谢谢各位,晚安!
[ 本帖最后由 qwertl 于 2009-12-17 00:17 编辑 ]
作者: Batcher 时间: 2009-12-17 01:13
- @echo off
- for /f "delims=" %%i in ('sed -n "s/.*ahjoe.*[^0-9]\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\).*/\1/p" c:\bat\ipload\1.txt') do (
- set ip=%%i
- )
复制代码
作者: qwertl 时间: 2009-12-17 20:25
试了下楼上的代码确实可以了!谢谢!
学习了!但'sed -n "s/.*ahjoe.*[^0-9]\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\).*/\1/p" c:\bat\ipload\1.txt'
这条命令看不懂,每次都是仅获取指定计算机名的IP吗
[ 本帖最后由 qwertl 于 2009-12-17 20:27 编辑 ]
作者: Batcher 时间: 2009-12-17 21:04 标题: 回复 13楼 的帖子
这个属于正则表达式的基础内容了,参考:正则表达式简介
http://bbs.bathome.net/thread-4485-1-1.html
你想获取其他计算机名,那就更改ahjoe吧。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |