标题: [文本处理] 求助:BAT提取文本里的ip地址 [打印本页]
作者: wang6542975 时间: 2013-9-27 13:49 标题: 求助:BAT提取文本里的ip地址
本帖最后由 wang6542975 于 2013-9-27 14:40 编辑
1.txt里的内容为
123.52.99.58的分组为:网维
1.1.1.1的分组为:网维
3.3.3.3分组为XX
4.35.20.4
怎么提取里面的IP地址到2.txt里
我写的代码如下:- for /f "delims=. tokens=1,2,3," %%a in (1.txt) do echo %%a.%%b.%%c.%%d>>2.txt
复制代码
。。有问题。。怎么修改。谢谢大家。
作者: batman 时间: 2013-9-27 14:17
本帖最后由 batman 于 2013-9-27 14:37 编辑
如果文本每行全是123.52.99.58的分组为:网维这样的格式:- @echo off
- (for /f "delims=的" %%a in (1.txt) do echo,%%a)>2.txt
- start 2.txt
复制代码
如果不是每行都是一样的格式:- @echo off
- (for /f "delims=的" %%a in ('findstr "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" 1.txt') do echo,%%a)>2.txt
- start 2.txt
复制代码
作者: wang6542975 时间: 2013-9-27 14:23
哥哥,第二个代码貌似有问题。
作者: batman 时间: 2013-9-27 14:24
for /f 有几个参数eol usebackq skip tokens delims,建议使用以下顺序来书写:
for /f "eol=a usebackq skip=1 tokens=1-4 delims=. " %%a in ("a b.txt") do...
如上for将会在读取a b.txt时忽略以a字符打头的行,并跳过头行,而取每行中以.和空格为分隔符分隔的1-4列的字符串。
作者: wang6542975 时间: 2013-9-27 14:27
谢谢BATMAN。但是你第二个代码没成功。。
作者: wang6542975 时间: 2013-9-27 14:29
IP最后一位后面没分隔符
作者: DAIC 时间: 2013-9-27 14:29
- sed "s/的.*//" a.txt > b.txt
复制代码
作者: wang6542975 时间: 2013-9-27 14:32
。。。不用第三方就实现不 了吗
作者: batman 时间: 2013-9-27 14:34
回复 3# wang6542975
是因为findstr中的转义符\写成了/,已改正
作者: wang6542975 时间: 2013-9-27 14:36
哥哥们。IP最后一位后面是没分隔符的。。看清楚。
作者: batman 时间: 2013-9-27 14:38
回复 10# wang6542975
你再看2楼的代码。。。
作者: DAIC 时间: 2013-9-27 14:39
- @echo off
- setlocal enabledelayedexpansion
- (for /f "tokens=1-4 delims=." %%a in (a.txt) do (
- set ipend=%%d
- if "!ipend:~2,1!" leq "9" (
- set ipend=!ipend:~0,3!
- ) else if "!ipend:~1,1!" leq "9" (
- set ipend=!ipend:~0,2!
- ) else if "!ipend:~0,1!" leq "9" (
- set ipend=!ipend:~0,1!
- )
- echo %%a.%%b.%%c.!ipend!
- ))>b.txt
复制代码
作者: wang6542975 时间: 2013-9-27 14:40
再看我1.txt里的内容。
作者: DAIC 时间: 2013-9-27 14:41
回复 10# wang6542975
我这里测试2楼的第二个代码没有发现问题
d:\Test>type a.txt
123.52.99.58的分组为:网维
1.1.1.1的分组为:网维
123.52.99.159的分组为:网维
d:\Test>test.bat
123.52.99.58
1.1.1.1
123.52.99.159
作者: wang6542975 时间: 2013-9-27 14:42
本帖最后由 wang6542975 于 2013-9-27 14:43 编辑
再看我1.txt里的内容。DAIC 哥做的完美。
作者: wang6542975 时间: 2013-9-27 14:49
难度再提升一下!如果1.txt的内容如下:
123.52.99.58的分组为:网维
1.2.2.3.sdaf
20.1.13.5
127.0.0.1
分组为:网维5.6.3.44
如何提取IP地址?
作者: batman 时间: 2013-9-27 14:53
本帖最后由 batman 于 2013-9-27 14:56 编辑
回复 15# wang6542975
你要求总在改?我给一个极端文本吧
25.12.167.7检2组
1234.34.87.19
103.256.78.11
57.83.022.44
78.71.74.296国家地址
192.168.0.23在线
处理后应是
25.12.167.7
192.168.0.23
作者: wang6542975 时间: 2013-9-27 14:54
恩。。。BATMAN哥。我的要求总在变。
作者: batman 时间: 2013-9-27 14:57
回复 18# wang6542975
这是不尊重人的表现,没有哪个代码可以处理所有情况,具体问题具体分析才是的。。。
作者: wang6542975 时间: 2013-9-27 14:58
奥。奥。这是我没考虑到的。不好意思。
作者: DAIC 时间: 2013-9-27 16:02
本帖最后由 DAIC 于 2013-9-27 16:04 编辑
回复 16# wang6542975 - @echo off
- setlocal enabledelayedexpansion
- (for /f "tokens=1-4 delims=." %%a in (a.txt) do (
- if "%%a" leq "9" (
- set ipend=%%d
- if "!ipend:~2,1!" leq "9" (
- set ipend=!ipend:~0,3!
- ) else if "!ipend:~1,1!" leq "9" (
- set ipend=!ipend:~0,2!
- ) else if "!ipend:~0,1!" leq "9" (
- set ipend=!ipend:~0,1!
- )
- set ip=%%a.%%b.%%c.!ipend!
- ) else (
- set ipstart=%%a
- if "!ipstart:~-3,1!" leq "9" (
- set ipstart=!ipstart:~-3,3!
- ) else if "!ipstart:~-2,1!" leq "9" (
- set ipstart=!ipstart:~-2,2!
- ) else if "!ipstart:~-1,1!" leq "9" (
- set ipstart=!ipstart:~-1,1!
- )
- set ip=!ipstart!.%%b.%%c.%%d
- )
- echo !ip!
- ))>b.txt
复制代码
作者: terse 时间: 2013-9-27 16:29
三方SED- @echo off
- sed -r "s/[^0-9]*([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*/\1/" 1.txt
- pause
复制代码
P的话不一定很精准- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1-4 delims=." %%a in (1.txt) do (
- set ipa=&set "ipd="
- set a=%%a&set d=%%d
- for /L %%i in (1,1,3) do (
- if "!a:~-%%i,1!" leq "9" if "!a:~-%%i,1!" geq "0" set ipa=!a:~-%%i,1!!ipa!
- )
- for /L %%i in (0,1,2) do (
- if "!d:~%%i,1!" leq "9" if "!d:~%%i,1!" geq "0" set ipd=!ipd!!d:~%%i,1!
- )
- echo !ipa!.%%b.%%c.!ipd!
- )
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |