Board logo

标题: [文本处理] 批处理怎么提取文本行中,带有大小写字母数字的行 已经解决 [打印本页]

作者: 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

  1. @echo off
  2. (for /f "tokens=1,*" %%i in (a.txt) do (
  3. for /f "delims=abcdefghijklmnopqrstuvwxyz" %%a in ("#%%j") do if not "%%a"=="#%%j" (
  4. for /f "delims=ABCDEFGHIJKLMNOPQRSTUVWXYZ" %%b in ("#%%j") do if not "%%b"=="#%%j" (
  5. for /f "delims=0123456789" %%c in ("#%%j") do if not "%%c"=="#%%j" (
  6. echo;%%i %%j
  7. )
  8. )
  9. )
  10. ))>b.txt
  11. pause & exit /b
复制代码

作者: terse    时间: 2015-10-6 14:04

  1. @if(0)==(0) echo off
  2. cscript -nologo -e:jscript %0 <a.txt >b.txt
  3. pause & exit/b
  4. @end
  5. var reg = /^[^\t]+\t+[a-zA-Z]+\d+\b/;
  6. while (!WScript.StdIn.AtEndOfStream){
  7.     var str = WScript.StdIn.ReadLine();
  8.     if (str.match(reg)) WSH.Echo(str);
  9. }
复制代码

作者: WHY    时间: 2015-10-6 14:53

  1. @echo off
  2. 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]+"
  3. grep -oP "^\S+\s+[a-zA-Z\d]*(%s%)[a-zA-Z\d]*" a.txt|find /v "">b.txt
  4. 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

  1. var reg = /^[a-zA-Z]{4}[\d]{6}(?!\d)/;
复制代码

作者: wankoilz    时间: 2015-10-7 00:11

最近在学习awk:
  1. #&@gawk -f %0 a.txt >b.txt
  2. {
  3. if(match($2,/[A-Z]+[a-z]+[0-9]+/)>0){print}
  4. if(match($1,/[a-zA-Z]{4}[0-9]{6}/)>0){print}
  5. }
复制代码

作者: CrLf    时间: 2015-10-7 04:17

回复 7# wankoilz
  1. 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语法的影响,比如双引号不用转义之类的。
原来这样也行:
  1. #&cls&@gawk -f %0 a.txt&pause>nul&exit
  2. /[a-z]/&&/[A-Z]/&&/[0-9]/{print}
  3. /[a-zA-Z]{4}[0-9]{6}/{print}
复制代码
甚至只需要写上两个表达式,把print省掉,默认打印$0:
  1. #&cls&@gawk -f %0 a.txt&pause>nul&exit
  2. /[a-z]/&&/[A-Z]/&&/[0-9]/
  3. /[a-zA-Z]{4}[0-9]{6}/
复制代码
或者:
  1. /[a-z]/&&/[A-Z]/&&/[0-9]/;/[a-zA-Z]{4}[0-9]{6}/
复制代码
awk真够灵活的...
作者: terse    时间: 2015-10-7 13:08

以为匹配又次序的 字母和数字组合吧
  1. var reg = /^[^\t]+\t(?=(([a-z]+(?=[0-9]))|([0-9]+(?=[a-z])))+)/i;
复制代码





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