Board logo

标题: [文本处理] [已解决]批处理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:
  1. 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

  1. @echo off
  2. for /f "tokens=4 delims= " %%i in ('findstr /i ahjoe c:\bat\ipload\1.txt') do (
  3.     set ip=%%i
  4.     setlocal enabledelayedexpansion
  5.     set ip=!ip:~0,-2!
  6.     echo !ip!
  7.     endlocal
  8. )
复制代码

作者: 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

  1. @echo off
  2. 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 (
  3.     set ip=%%i
  4. )
复制代码

作者: 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