Board logo

标题: [文本处理] [已解决]批处理如何提取文本中每行的前两列内容并按指定格式合并 [打印本页]

作者: smallbat    时间: 2014-5-22 21:41     标题: [已解决]批处理如何提取文本中每行的前两列内容并按指定格式合并

本帖最后由 pcl_test 于 2016-10-4 00:04 编辑

222.35.73.93  80  高匿  中国  05月22日  3.43(7票)  3.07  32天
218.4.189.194  3128  高匿  中国  05月22日  3.36(11票)  3.25  5天
61.144.24.106  3128  高匿  中国  05月22日  3.30(33票)  3.30  2天
60.169.11.188  80  高匿  中国  05月22日  3.26(82票)  3.18  36天
221.8.9.6  80  高匿  中国  05月22日  3.25(32票)  3.25  1天
222.169.226.202  80  匿名  中国  05月22日  3.20(25票)  3.31  11天
122.200.82.158  80  高匿  中国  05月22日  3.17(6票)  3.17  5天  

221.204.253.179  3128  高匿  中国  05月22日  3.16(31票)  2.98  21天
     
221.204.246.116  3128  高匿  中国  05月22日  3.14(14票)  3.14  2天
     
218.97.194.94  80  透明  中国  05月22日  3.11(53票)  3.22  41天
     

=====传说中的分割线=====================================
以上是搜索的一些代理ip,放在一个txt里面,要将他改成如下格式:举一个例子,比如下面这个

221.238.193.163  80  高匿  中国  05月08日  3.10(10票)  3.10  16天

改成→

221.238.193.163:80
     

谢谢各位!
作者: CrLf    时间: 2014-5-23 00:47

  1. @(for /f "tokens=1,2" %%a in (a.txt) do @echo %%a:%%b)>b.txt
复制代码

作者: HappyBirthday    时间: 2014-5-23 04:46

notepad++(绝对值得下载使用)
点击 菜单里的 搜索→替换
在“查找模式”里的单选框里选择“正则表达式”
“查找目标”里填^([^\s]+?)\s+(.*?)\s.*$
“替换为”里填“\1\:\2”
随便删除空行
可以先点击“替换”,替换一个或几个看看,如果行得通点击“全部替换”,一次性搞定。

如果是vista以上还可以用powershell(所有程序 附件 里)
powershell -command "& {(get-content “文件名路径(加上双引号)”) -replace '^([^\s]+?)\s+(.*?)\s.*$','$12'}"
作者: smallbat    时间: 2014-5-23 11:57

回复 2# CrLf


    你好,可以大致教一下吗?因为平时会经常碰到有规律的txt的替换啊,删除啊什么的!

请问上面的语法 稍微讲解一下好吗?我就学下这个txt的基本东西!有效提高工作效率!
作者: DAIC    时间: 2014-5-23 16:27

回复 4# smallbat


这样有教程:
http://bbs.bathome.net/thread-2189-1-1.html
作者: smallbat    时间: 2014-5-23 22:10

回复 5# DAIC


    我刚刚看了教程

说分割取节,要先delims定义然后再用tokens啊

比如以下规则的ip地址

223.4.168.234:3128@HTTP#浙江省杭州市:阿里巴巴网络有限公司
223.197.55.82:8080@HTTP#香港:电讯盈科有限公司
223.197.55.83:8080@HTTP#香港:电讯盈科有限公司

我要取的@之前的
我就这样尝试依葫芦画瓢的写了一个

@(for /f "delims=@ " %%i in (a.txt) do echo %%i)>c.txt

但是运行下来变成这样的
C:\Users\aabbcc\Desktop\ip>echo 223.4.168.234:3128
223.4.168.234:3128

把路径显示出来了,而且ip出现了2次!

可以帮我改下吗?
作者: terse    时间: 2014-5-23 22:44

回复 6# smallbat
前面第一个@  移到这里 @echo %%i
作者: DAIC    时间: 2014-5-25 09:13

回复 6# smallbat


教程里面没有说delims一定要放在tokens前面吧?
微软的文档里面tokens是放在delims前面的,建议你也这样做,以免遇到不必要的问题。
作者: DAIC    时间: 2014-5-25 09:15

回复 6# smallbat


改成这样:
  1. @echo off
  2. (for /f "delims=@" %%i in (a.txt) do (
  3.     echo %%i
  4. ))>c.txt
复制代码

作者: smallbat    时间: 2014-5-25 23:44

回复 9# DAIC

我后来依葫芦画瓢这样修改执行下来也可以了!
    @(for /f "delims=@ " %%i in (a.txt) do @echo %%i)>b.txt

总的来说,感受到了bat的威力
作者: 飞来石    时间: 2014-5-26 15:05

  1. @for /f "delims= " %%i in (a.txt) do echo %%i>>b.txt
复制代码
试过,可以用




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