标题: [文本处理] 批处理怎么提取文本行中,带有大小写字母数字的行 已经解决 [打印本页]
作者: 649918043 时间: 2015-10-6 03:46 标题: 批处理怎么提取文本行中,带有大小写字母数字的行 已经解决
本帖最后由 649918043 于 2015-10-9 04:06 编辑
批处理怎么提取文本行中,第2列带有大小写字母数字的行
文本格式a.txt 如下: TAB分隔为2列
1列 2列
linkailin@idc.com Lklylh00
gdchenbin5@idc.com 840516cb
wangdong081127@idc.com 45852216
tiayulong@idc.com 124548277
et2400@idc.com Luxibing
cesx444442@idc.com 321456987
200019zph@idc.com 2616831024
cxl909@idc.com Windowsme
dadaxing@idc.com Panfeng999
njhuos@idc.com Mnbvcxz1
zangli@idc.com Zl506a90
st-lxy@idc.com 197254999
kofv70@idc.com 62877068
zw105zw@idc.com Ay105105
llq5404@idc.com 33546131
hnsysdldh@idc.com 19811021
aiolos2005@idc.com 19881214
chenjing855160@idc.com 19343007
klingsoul@idc.com Eckingsoul
24h@idc.com marioas110
longxiaoge@idc.com Songsong
df_feeling@idc.com Df825138
helongxiang@idc.com 9887421810
zhyqrqm@idc.com Rqm1234
liqikkkk@idc.com 293000
ff0125@idc.com 12525
wangxin5433@idc.com 543388
ohgg@idc.com Gg790304
wap001@idc.com 870203
lingxue00@idc.com 800318052
cc8691215@idc.com 8691215
jsjjcaizhong@idc.com 680830
hotzgx@idc.com 198212123
huangbangmian@idc.com 802825829
wisely2001@idc.com 1234567
ixinye@idc.com Fighter
qweqw123478@sina.com 123123w
sj1005@idc.com 5201005
huanghaoyi2000@idc.com 72694528
wangyan658@idc.com Hujiaying520
jeffdong0303@idc.com 226600
xusheng223@idc.com 10185
xieyuansong2005@idc.com 7757677
提取第2列,带大写写字母+小写字母+数字特征,整行提取出来b.txt
目前需要:查找a.txt第2列中 字符串有大写字母+小写字母+数字特征的行,提取出来放入b.txt另外个文本里
linkailin@idc.com Lklylh00
zangli@idc.com Zl506a90
qwee123478@sina.com 123123w
df_feeling@idc.com Df825138
第2的这列包含有大写小写字母并且有数字的,整行提取写入b.txt
提取第2列,带大写写字母+小写字母+数字特征,整行提取出来b.txt
另外如果需要提取第1列前面包含有4个字母6个数字的整行提取到b.txt,又因该怎么写
qwee123478@sina.com 123123w
cesx444442@idc.com 321456987
因该怎么写???求教,,因该怎么写批处理. 文本很大估计用第3方处理合适些
作者: 回家路上 时间: 2015-10-6 11:37
- @echo off
- (for /f "tokens=1,*" %%i in (a.txt) do (
- for /f "delims=abcdefghijklmnopqrstuvwxyz" %%a in ("#%%j") do if not "%%a"=="#%%j" (
- for /f "delims=ABCDEFGHIJKLMNOPQRSTUVWXYZ" %%b in ("#%%j") do if not "%%b"=="#%%j" (
- for /f "delims=0123456789" %%c in ("#%%j") do if not "%%c"=="#%%j" (
- echo;%%i %%j
- )
- )
- )
- ))>b.txt
- pause & exit /b
复制代码
作者: terse 时间: 2015-10-6 14:04
- @if(0)==(0) echo off
- cscript -nologo -e:jscript %0 <a.txt >b.txt
- pause & exit/b
- @end
- var reg = /^[^\t]+\t+[a-zA-Z]+\d+\b/;
- while (!WScript.StdIn.AtEndOfStream){
- var str = WScript.StdIn.ReadLine();
- if (str.match(reg)) WSH.Echo(str);
- }
复制代码
作者: WHY 时间: 2015-10-6 14:53
- @echo off
- set "s=[a-z]+[A-Z]+\d+|[a-z]+\d+[A-Z]+|[A-Z]+[a-z]+\d+|[A-Z]+\d+[a-z]+|\d+[a-z]+[A-Z]+|\d+[A-Z]+[a-z]+"
- grep -oP "^\S+\s+[a-zA-Z\d]*(%s%)[a-zA-Z\d]*" a.txt|find /v "">b.txt
- pause
复制代码
作者: 649918043 时间: 2015-10-6 16:08
另外如果需要提取第1列前面包含有4个字母6个数字的整行提取到b.txt,又因该怎么写
qweqwe123478@sina.com 123123w
cesx444442@idc.com 321456987
请教下 以上是例子
作者: terse 时间: 2015-10-6 20:42
- var reg = /^[a-zA-Z]{4}[\d]{6}(?!\d)/;
复制代码
作者: wankoilz 时间: 2015-10-7 00:11
最近在学习awk:- #&@gawk -f %0 a.txt >b.txt
- {
- if(match($2,/[A-Z]+[a-z]+[0-9]+/)>0){print}
- if(match($1,/[a-zA-Z]{4}[0-9]{6}/)>0){print}
- }
复制代码
作者: CrLf 时间: 2015-10-7 04:17
回复 7# wankoilz - gawk "$2~/[a-z]/&&$2~/[A-Z]/&&$2~/[0-9]/" a.txt
复制代码
作者: wankoilz 时间: 2015-10-7 08:55
本帖最后由 wankoilz 于 2015-10-7 13:17 编辑
回复 8# CrLf
对的,可以用~直接连接表达式(实际上>0也可省),[]字符集已经包含至少一个字符,加号可以省,并且兄弟的代码比起我的可以兼容顺序不同的情况,感谢指点。
不过我习惯把awk代码放到单独文件,这样可以避开bat语法的影响,比如双引号不用转义之类的。
原来这样也行:- #&cls&@gawk -f %0 a.txt&pause>nul&exit
- /[a-z]/&&/[A-Z]/&&/[0-9]/{print}
- /[a-zA-Z]{4}[0-9]{6}/{print}
复制代码
甚至只需要写上两个表达式,把print省掉,默认打印$0:- #&cls&@gawk -f %0 a.txt&pause>nul&exit
- /[a-z]/&&/[A-Z]/&&/[0-9]/
- /[a-zA-Z]{4}[0-9]{6}/
复制代码
或者:- /[a-z]/&&/[A-Z]/&&/[0-9]/;/[a-zA-Z]{4}[0-9]{6}/
复制代码
awk真够灵活的...
作者: terse 时间: 2015-10-7 13:08
以为匹配又次序的 字母和数字组合吧- var reg = /^[^\t]+\t(?=(([a-z]+(?=[0-9]))|([0-9]+(?=[a-z])))+)/i;
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |