标题: [文本处理] 批处理如何查找匹配多个关键字的行数 [打印本页]
作者: canyuexiaolang 时间: 2012-7-12 00:26 标题: 批处理如何查找匹配多个关键字的行数
限制要求:关键字里含有空格以及特殊符号。
本来想用个for %%a in (%关键字%) do 的,但是关键字里有空格,这样并不能做到。。
但是定义多个关键字略嫌麻烦,所以还请赐教。
作者: CrLf 时间: 2012-7-12 00:32
不太明白,能否举个例子?
作者: canyuexiaolang 时间: 2012-7-12 01:05
回复 2# CrLf
- @echo off & setlocal enabledelayedexpansion
- (
- ::定义_key变量,前缀必须是_key,后边无所谓,_key**都行。
- set "_key1=canyue"
- set "_key2=cod 4"
- set "_key3=^"
- set "_key4=521"
- )
-
- set "filename=a.txt"
- for /f "tokens=2* delims==" %%f in ('set _key') do set /a keynum+=1
- for /f "tokens=* delims=" %%i in (%filename%) do (
- set /a oknum=0
- for /f "tokens=2* delims==" %%f in ('set _key') do (echo %%i | findstr "%%f">nul && set /a oknum+=1)
- if !oknum! equ !keynum! echo %%i
- )
- pause
复制代码
类似于这种功能。
a.txt
- aabccanyueqq !@#%"""""""^()@%@^@$^#%&#%|}{{{<><><>,..()()()(;;;;cod 4
- abccanyueqq !@#%^()@%@^@$"""""""^#%&#%|}{{{<><><>,..()()()(;;;;
- qweqwecanyue asdasdqarWT#$%"""""%^*^* aa qq cqc canyueppc cod 4 521
复制代码
匹配的关键字
复制代码
结果是
- qweqwecanyue asdasdqarWT#$%"""""%^*^* aa qq cqc canyueppc cod 4 521
复制代码
作者: canyuexiaolang 时间: 2012-7-12 01:05
本帖最后由 canyuexiaolang 于 2012-7-12 01:14 编辑
回复 2# CrLf
还得显示行号
还有总共匹配的行数。。
作者: CrLf 时间: 2012-7-12 08:49
findstr 要想同时匹配多个关键词只好用管道了,关键词含空格只能用 /c 开关来携带参数,若关键词中正则语法中的特殊字符可用 "\" 将其转义或用 /c 开关关闭正则- findstr /n "canyue" 1.txt|findstr /c:"cod 4"|findstr /c:"^"|findstr "521"
复制代码
作者: canyuexiaolang 时间: 2012-7-12 10:56
回复 5# CrLf
不能定义多个关键字么
set 关键字=1 asdasd asfhd
那样的。。
我觉得不行,但是别人这么要求的。。
作者: CrLf 时间: 2012-7-12 13:05
回复 6# canyuexiaolang
不太明白兄台的意思,
如果是问如何将含空格的不定数量的关键词依次 findstr,那么有几种比较常见的办法:- findstr /g:关键词列表.txt a.txt
复制代码
- for %%a in (关键词1 "关 键 词 2") do findstr /c:"%%~a" a.txt
复制代码
- set key="关键词1" "关 键 词 2" "key3"
- findstr /c:%key:" "=" /c:"% a.txt
复制代码
如果是问能否只用一句findstr同时匹配所有关键词,那是没办法的,findstr 中的关键词是并列关系,所以虽然可以在一个 findstr 中使用多个关键词,但匹配时只要符合其中之一即输出,例:- @echo off
- echo 匹配其一:
- more +7 %0|findstr /c:"t e s t" /c:"abc" /c:"123"
- echo 同时符合所有关键词:
- more +7 %0|findstr /c:"t e s t"|findstr /c:"abc"|findstr /c:"123"
- pause&exit
-
- t e s t
- abcdefg
- 123 test abc
复制代码
作者: canyuexiaolang 时间: 2012-7-12 13:33
回复 7# CrLf
感谢感谢
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |