[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

比如我有一个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

  1. gawk "/^tel:151/{print s\"\n\"$0\"\n\"}{s=$0}" a.txt > b.txt
复制代码
1

评分人数

TOP

回复 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
...............

TOP

回复 3# ilovebath
  1. gawk -v RS= "/tel:151/{print $0\"\n\"}" a.txt > b.txt
复制代码

TOP

回复 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这三个属性

TOP

  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
复制代码

TOP

回复 6# lvsehuaxue


    这段代码效率不高,太慢了,比gawk差远了,这段代码并不能指定过滤我写出的三个属性tel,zz,user这三个属性,如果txt 文件中有十几个属性怎么办呢?

TOP

回复 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\"}"
复制代码

TOP

回复 8# awk


    谢谢,你的技术真好,  tel:151 这个地方如果运用通配符呢? 比如我想查找中间为151的数字,怎么写,*151*这样的形式呢?

TOP

回复 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

评分人数

TOP

回复 10# awk


    谢谢。

TOP

你看看可以不
  1. sed -n "/tel:151/{p;n;/zz:/p;n;/user:/p;n;/^$/p;}" test.txt
复制代码

TOP

呵呵,这个楼主真有意思,硬撑着顶过了三层楼!~
——以后有什么问题请一次性说明,不要这样搞得大家都疲劳。
awk很有耐心,赞一个!~
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

非常佩服awk
ak47
有创新,多创新;无创新,多模仿;无模仿,多坚持

TOP

返回列表