Board logo

标题: [文本处理] 求批处理提取特殊字符之间的内容 [打印本页]

作者: mokii    时间: 2015-8-7 19:50     标题: 求批处理提取特殊字符之间的内容

想提取如下文件里 "server" 行里面的网址到一个txt文件:
请问如何写呢?谢谢
  1.         {
  2.             "server":"ww3t.h34xg.com",
  3.             "server_port":"56631",
  4.             "local_port":"757",
  5.             "mode":"aes",
  6. "link":"ww3t.h34xg.com",
  7.         },
  8.         {
  9.             "server":"d22t.hxer4g.org",
  10.             "server_port":"56631",
  11.             "local_port":"757",
  12.             "mode":"aes",
  13. "link":"d22t.hxer4g.org",
  14.         },
  15.         {
  16.             "server":"25-6.hxjhg.cn",
  17.             "server_port":"56631",
  18.             "local_port":"757",
  19.             "mode":"aes",
  20.             "link":"25-6.hxjhg.cn",
  21.         },
  22.         {
  23.             "server":"cnc.hyyxg.net.cn",
  24.             "server_port":"56631",
  25.             "local_port":"757",
  26.             "mode":"aes",
  27.             "link":"cnc.hyyxg.net.cn",
  28.         },
复制代码
结果像这样:
  1. ww3t.h34xg.com
  2. d22t.hxer4g.org
  3. 25-6.hxjhg.cn
  4. cnc.hyyxg.net.cn
复制代码

作者: pcl_test    时间: 2015-8-7 20:39

本帖最后由 pcl_test 于 2015-8-8 12:21 编辑
  1. ::先下载http://batch-cn.qiniudn.com/tool/2.5.1/grep.exe
  2. >"2.txt" grep -oP "(?<=server\":\")[^\"]+" "1.txt"
复制代码

作者: pcl_test    时间: 2015-8-7 20:49

  1. @(for /f tokens^=4^ delims^=^" %%a in ('findstr "server\":\"[^\"]*\"" "1.txt"') do @echo;%%a)>"2.txt"
复制代码

作者: mokii    时间: 2015-8-8 11:07

回复 3# pcl_test


    感谢!
作者: mokii    时间: 2015-8-8 11:42

回复 3# pcl_test


    执行脚本以后,发现有一些行没有提取到,因为里面随机包含了一些空格,类似这样:
  1.         {
  2.             "server"    :   "25-6.hxjhg.cn",
  3.             "server_port"    :    "56631",
  4.             "local_port"    :    "757",
  5.             "mode"    :    "aes",
  6.             "link"    :    "25-6.hxjhg.cn",
  7.         {
复制代码
请问这种情况如何破?
作者: pcl_test    时间: 2015-8-8 12:36

回复 5# mokii
  1. @if(0)==(0) echo off&cscript -nologo -e:jscript "%~0"<"1.txt" >"2.txt"& pause & exit @end
  2. var arr = WScript.StdIn.Readall().match(/server"\s*:\s*"[^"]+"/g);
  3. for (var i=0;i<arr.length;i++){WSH.Echo(arr[i].replace(/server"\s*:\s*"([^"]+)"/,'$1'));}
复制代码

作者: mokii    时间: 2015-8-8 13:54

回复 6# pcl_test


    好厉害!完全看不懂




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