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

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

[复制链接]
发表于 2015-10-6 03:46:42 | 显示全部楼层 |阅读模式
本帖最后由 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:48 | 显示全部楼层
  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
复制代码
发表于 2015-10-6 14:04:22 | 显示全部楼层
  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. }
复制代码
发表于 2015-10-6 14:53:03 | 显示全部楼层
  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
复制代码

评分

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

查看全部评分

 楼主| 发表于 2015-10-6 16:08:11 | 显示全部楼层
另外如果需要提取第1列前面包含有4个字母6个数字的整行提取到b.txt,又因该怎么写
qweqwe123478@sina.com        123123w
cesx444442@idc.com        321456987


请教下   以上是例子
发表于 2015-10-6 20:42:26 | 显示全部楼层
  1. var reg = /^[a-zA-Z]{4}[\d]{6}(?!\d)/;
复制代码
发表于 2015-10-7 00:11:47 | 显示全部楼层
最近在学习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. }
复制代码
发表于 2015-10-7 04:17:52 | 显示全部楼层
回复 7# wankoilz
  1. gawk "$2~/[a-z]/&&$2~/[A-Z]/&&$2~/[0-9]/" a.txt
复制代码
发表于 2015-10-7 08:55:51 | 显示全部楼层
本帖最后由 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真够灵活的...
发表于 2015-10-7 13:08:02 | 显示全部楼层
以为匹配又次序的 字母和数字组合吧
  1. var reg = /^[^\t]+\t(?=(([a-z]+(?=[0-9]))|([0-9]+(?=[a-z])))+)/i;
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 12:11 , Processed in 0.020855 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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