Board logo

标题: [文本处理] 【已结】按要求提取文本中的域名 [打印本页]

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

  1. @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

再加上剔除重复域名的代码:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=5-13 delims=. " %%a in (hosts.txt) do (
  3.      set /a n=0
  4.      call :lp %%a %%b %%c %%d %%e %%f %%g %%h %%i  
  5. )
  6. start new.txt&goto :eof
  7. :lp
  8. if "%1" neq "" (
  9.    set /a n+=1&set "_!n!=%1"
  10.    shift&goto lp
  11. )
  12. set /a a=n-1,b=a-1
  13. for %%k in (com cn net us) do (
  14.     if "!_%n%!" equ "%%k" set "one=a"
  15.     if "!_%a%!" equ "com" if "!_%n%!" equ "cn" set "two=a"
  16. )   
  17. if defined one (
  18.    if defined two (
  19.       if not defined !_%b%!.!_%a%!.!_%n%! (
  20.          echo !_%b%!.!_%a%!.!_%n%!>>new.txt
  21.          set "!_%b%!.!_%a%!.!_%n%!=a"&set "two="
  22.       )
  23.       ) else (
  24.       if not defined !_%a%!.!_%n%! (
  25.          echo !_%a%!.!_%n%!>>new.txt
  26.          set "!_%a%!.!_%n%!=a"&set "one="
  27.       )
  28.    )
  29. )
复制代码

[ 本帖最后由 batman 于 2009-2-16 10:16 编辑 ]




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2