找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 32156|回复: 13

[文本处理] 批处理怎么过滤txt中的字符?

[复制链接]
发表于 2011-9-7 17:50:29 | 显示全部楼层 |阅读模式
比如我有一个txt文件,里面的内容为


site:abc.com
tel:151152

site:eak.com
tel:152153

site:acuk.com
tel:151159


我的意思是说怎么过滤这个txt中存在tel并且tel的值为151开头的数据。也就是最后重新生成一个新的文件,里面的内容为

site:abc.com
tel:151152

site:acuk.com
tel:151159
发表于 2011-9-7 18:05:54 | 显示全部楼层
  1. gawk "/^tel:151/{print s"\n"$0"\n"}{s=$0}" a.txt > b.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
qc5111 + 1 乐于助人

查看全部评分

 楼主| 发表于 2011-9-7 18:29:41 | 显示全部楼层
回复 2# awk


    如果txt里面的内容是这样的呢?
site:abc.com
tel:151152
dsfdsfdfs
.................................

site:eak.com
tel:152153
zzzzzzzzzz
.....................................

site:acuk.com
tel:151159
dsfdsdzzzzzzzzzzz
...............


我想得到的结果为
site:abc.com
tel:151152
dsfdsfdfs
.................................

site:acuk.com
tel:151159
dsfdsdzzzzzzzzzzz
...............
发表于 2011-9-7 18:36:29 | 显示全部楼层
回复 3# ilovebath
  1. gawk -v RS= "/tel:151/{print $0"\n"}" a.txt > b.txt
复制代码
 楼主| 发表于 2011-9-7 18:46:17 | 显示全部楼层
回复 4# awk


    谢谢,如果txt文件里的内容为:

site:abc.com
tel:151152
zz:dsdfskdfsdz
user:xxx

site:eak.com
tel:152153
zz:dsdfskdfsdzzz
user:ccc

site:acuk.com
tel:151159
zz:dsdfskdfsddsdsdsd
user:aaa

我想要的结果是这样的,我相导入tel为151的数据,并且数据为
tel:151152
zz:dsdfskdfsdz
user:xxx

tel:151159
zz:dsdfskdfsddsdsdsd
user:aaa
这样的形式,我们只要包含tel,zz,user这三个属性
发表于 2011-9-7 21:18:33 | 显示全部楼层

  1. @Echo Off&Setlocal Enabledelayedexpansion
  2. (for /f "delims=" %%i in (a.txt) do (
  3.    set c=!b!&set b=!a!&set a=%%i
  4.    echo !c! |findstr /i "^tel:151">nul&&(echo !c!&echo !b!&echo !a!&echo.)))>b.txt
  5. pause
复制代码
 楼主| 发表于 2011-9-7 21:27:10 | 显示全部楼层
回复 6# lvsehuaxue


    这段代码效率不高,太慢了,比gawk差远了,这段代码并不能指定过滤我写出的三个属性tel,zz,user这三个属性,如果txt 文件中有十几个属性怎么办呢?
发表于 2011-9-8 09:00:12 | 显示全部楼层
回复 5# ilovebath
  1. gawk -v RS= "/tel:151/{print $0}" a.txt | gawk "/site:|tel:|user:/{if($0~/site:/||$0~/tel:/)print $0;if($0~/user:/)print $0"\n"}"
复制代码
 楼主| 发表于 2011-9-8 09:18:10 | 显示全部楼层
回复 8# awk


    谢谢,你的技术真好,  tel:151 这个地方如果运用通配符呢? 比如我想查找中间为151的数字,怎么写,*151*这样的形式呢?
发表于 2011-9-8 10:06:06 | 显示全部楼层
回复 9# ilovebath
  1. gawk --re-interval -v RS= "/tel:.*151.*/{print $0}" a.txt | gawk "/site:|tel:|user:/{if($0~/site:/||$0~/tel:/)print $0;if($0~/user:/)print $0"\n"}"
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2011-9-8 10:09:06 | 显示全部楼层
回复 10# awk


    谢谢。
发表于 2011-9-8 12:47:36 | 显示全部楼层
你看看可以不
  1. sed -n "/tel:151/{p;n;/zz:/p;n;/user:/p;n;/^$/p;}" test.txt
复制代码
发表于 2011-9-8 13:03:58 | 显示全部楼层
呵呵,这个楼主真有意思,硬撑着顶过了三层楼!~
——以后有什么问题请一次性说明,不要这样搞得大家都疲劳。
awk很有耐心,赞一个!~
发表于 2011-9-9 16:04:21 | 显示全部楼层
非常佩服awk
ak47
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 03:08 , Processed in 0.021767 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表