[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 求助: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里


我写的代码如下:
  1. for /f "delims=. tokens=1,2,3," %%a in (1.txt) do echo %%a.%%b.%%c.%%d>>2.txt
复制代码
。。有问题。。怎么修改。谢谢大家。

三方SED
  1. @echo off
  2. sed -r "s/[^0-9]*([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*/\1/" 1.txt
  3. pause
复制代码
P的话不一定很精准
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1-4 delims=." %%a in (1.txt) do (
  3.     set ipa=&set "ipd="
  4.     set a=%%a&set d=%%d
  5.     for /L %%i in (1,1,3) do (
  6.          if "!a:~-%%i,1!" leq "9" if "!a:~-%%i,1!" geq "0" set ipa=!a:~-%%i,1!!ipa!
  7.     )
  8.     for /L %%i in (0,1,2) do (
  9.          if "!d:~%%i,1!" leq "9" if "!d:~%%i,1!" geq "0" set ipd=!ipd!!d:~%%i,1!
  10.     )
  11.     echo !ipa!.%%b.%%c.!ipd!
  12. )
  13. pause
复制代码

TOP

本帖最后由 DAIC 于 2013-9-27 16:04 编辑

回复 16# wang6542975
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "tokens=1-4 delims=." %%a in (a.txt) do (
  4.     if "%%a" leq "9" (
  5.         set ipend=%%d
  6.         if "!ipend:~2,1!" leq "9" (
  7.             set ipend=!ipend:~0,3!
  8.         ) else if "!ipend:~1,1!" leq "9" (
  9.             set ipend=!ipend:~0,2!
  10.         ) else if "!ipend:~0,1!" leq "9" (
  11.             set ipend=!ipend:~0,1!
  12.         )
  13.         set ip=%%a.%%b.%%c.!ipend!
  14.     ) else (
  15.         set ipstart=%%a
  16.         if "!ipstart:~-3,1!" leq "9" (
  17.             set ipstart=!ipstart:~-3,3!
  18.         ) else if "!ipstart:~-2,1!" leq "9" (
  19.             set ipstart=!ipstart:~-2,2!
  20.         ) else if "!ipstart:~-1,1!" leq "9" (
  21.             set ipstart=!ipstart:~-1,1!
  22.         )
  23.         set ip=!ipstart!.%%b.%%c.%%d
  24.     )
  25.     echo !ip!
  26. ))>b.txt
复制代码

TOP

奥。奥。这是我没考虑到的。不好意思。

TOP

回复 18# wang6542975


    这是不尊重人的表现,没有哪个代码可以处理所有情况,具体问题具体分析才是的。。。
***共同提高***

TOP

恩。。。BATMAN哥。我的要求总在变。

TOP

本帖最后由 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
***共同提高***

TOP

难度再提升一下!如果1.txt的内容如下:
123.52.99.58的分组为:网维
1.2.2.3.sdaf
20.1.13.5
127.0.0.1
分组为:网维5.6.3.44

如何提取IP地址?

TOP

本帖最后由 wang6542975 于 2013-9-27 14:43 编辑

再看我1.txt里的内容。DAIC 哥做的完美。

TOP

回复 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

TOP

再看我1.txt里的内容。

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "tokens=1-4 delims=." %%a in (a.txt) do (
  4.     set ipend=%%d
  5.     if "!ipend:~2,1!" leq "9" (
  6.         set ipend=!ipend:~0,3!
  7.     ) else if "!ipend:~1,1!" leq "9" (
  8.         set ipend=!ipend:~0,2!
  9.     ) else if "!ipend:~0,1!" leq "9" (
  10.         set ipend=!ipend:~0,1!
  11.     )
  12.     echo %%a.%%b.%%c.!ipend!
  13. ))>b.txt
复制代码

TOP

回复 10# wang6542975


    你再看2楼的代码。。。
***共同提高***

TOP

哥哥们。IP最后一位后面是没分隔符的。。看清楚。

TOP

回复 3# wang6542975


    是因为findstr中的转义符\写成了/,已改正
***共同提高***

TOP

返回列表