标题: [文本处理] 【已结】按要求提取文本中的域名 [打印本页]
作者: sjminh 时间: 2009-2-15 21:11 标题: 【已结】按要求提取文本中的域名
我现在想将hosts中的域名复制下来(请注意这里是baudu.com qq.com sina.com.cn之类的,而不是后面的全部URL),但文件太大想用批处理,但前面的代码多少不一,所以想倒过来选取。这时的问题是tokens能不能倒着选取呢?
问题解释:比如127.0.1.1 vip.my.qq.com.qqncn.cn这一行,截取qqncn.cn这几个,前面的127.0.1.1 vip.my.qq.com.全都不要;当然218.201.39.98 123.blog5460.com.cn这一行中的blog5460.com.cn留着;其他同理
希望大家可以指点一下
下面是文件的一部分
[attach]919[/attach]
[ 本帖最后由 batman 于 2009-2-16 10:22 编辑 ]
作者: aresk 时间: 2009-2-15 21:38
什么意思??没明白,倒着选?你就
for /f "token=2 delims= " %i in (host.txt) do @echo %i>>newhost.txt
不就可以了??
或者你直接查找替换127.0.0.1不久可以了
[ 本帖最后由 aresk 于 2009-2-15 21:40 编辑 ]
作者: yslyxqysl 时间: 2009-2-15 21:51
- @setlocal ENABLEDELAYEDEXPANSION&cd.>newhosts.txt&for /f "delims=" %%i in (hosts.txt) do @(for %%j in (%%i) do @set vari=%%j)&echo !vari!>>newhosts.txt
复制代码
[ 本帖最后由 yslyxqysl 于 2009-2-15 21:54 编辑 ]
作者: batman 时间: 2009-2-15 22:19
再加上剔除重复域名的代码:- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=5-13 delims=. " %%a in (hosts.txt) do (
- set /a n=0
- call :lp %%a %%b %%c %%d %%e %%f %%g %%h %%i
- )
- start new.txt&goto :eof
- :lp
- if "%1" neq "" (
- set /a n+=1&set "_!n!=%1"
- shift&goto lp
- )
- set /a a=n-1,b=a-1
- for %%k in (com cn net us) do (
- if "!_%n%!" equ "%%k" set "one=a"
- if "!_%a%!" equ "com" if "!_%n%!" equ "cn" set "two=a"
- )
- if defined one (
- if defined two (
- if not defined !_%b%!.!_%a%!.!_%n%! (
- echo !_%b%!.!_%a%!.!_%n%!>>new.txt
- set "!_%b%!.!_%a%!.!_%n%!=a"&set "two="
- )
- ) else (
- if not defined !_%a%!.!_%n%! (
- echo !_%a%!.!_%n%!>>new.txt
- set "!_%a%!.!_%n%!=a"&set "one="
- )
- )
- )
复制代码
[ 本帖最后由 batman 于 2009-2-16 10:16 编辑 ]
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |