标题: [文本处理] 批处理如何删除txt文本中大于或小于10个字符的行? [打印本页]
作者: cm535 时间: 2011-7-23 20:38 标题: 批处理如何删除txt文本中大于或小于10个字符的行?
如何删除txt中大于 10 位数或小于 10 位数的行?请教各位高手啊?在此,先谢谢了!
txt文件内容如下:
1234567890
adassdscxv
abcdefghij
_+";?.,asd
123456789001234
xcvfxbvfvcbbmn,hjkhkl
sdgdfgfdhgflkili66545
abcdefghijklllsa
0998766666dsgdsg
12345
0987
aad
只有十个数字或字母的是前面四排,批处理后,只要是大于10位和小于10位数的行全部删除。
就是说,除了前面四排,后面都不要。
CUer老大在二楼的代码可以完美解决下面 a.txt 编码格式的文件,也就是每组数字后面都有一个回车的文件。
但无法解决aa.txt这种编码格式的文件,这种文件是BT4下的密码文件,我不知道那个黑色的方块是如何打出来的,不能复制,所以无法替换为回车符。
请问aa.txt是什么编码形式的txt文件,怎样和正常的txt文件相互转换?
肯请各位老大帮忙,多谢多谢!
作者: CUer 时间: 2011-7-23 20:41
- findstr "^..........$" a.txt >b.txt
复制代码
作者: cm535 时间: 2011-7-24 01:00
谢谢CUer老大,不知是什么原因,用你以上的代码,删除我给的上面的txt文件,没有一点问题!但是,我的实际txt文件有25万多行,2.5M大小。执行代码后,产生的b.txt为0字节,空白的!盼解决!多谢多谢老大啊!!!
作者: cm535 时间: 2011-7-24 01:06
txt内容改为如下数字后,执行代码b也为0字节
00000000
000000000
0000000000
00000000000
000000000000
0000000000000
00000000000000
000000000000000
0000000000000000
0000000000000000000000
000000000000000000000000
0000000000000000000000000
作者: mxxcgzxxx 时间: 2011-7-24 09:09
代码没错,你会不会文件名弄错了
还有就是文件格式不对
作者: cm535 时间: 2011-7-24 11:10
楼上说得对,帮我找到原因了。确实是格式不对!但我不知道怎么把格式改过来!截图如下:
正常的文件截图:
1234567890
adassdscxvv
abcdefghij
_+";?.,asd
123456789001234
xcvfxbvfvcbbmn,hjkhkl
sdgdfgfdhgflkili66545
abcdefghijklllsa
0998766666dsgdsg
12345
0987
aad
不能使用,需要转格式的文件截图:
我把这个txt文件的内容粘贴如下,一点都看不出格式不一样
00000000
000000000
0000000000
00000000000
000000000000
0000000000000
00000000000000
000000000000000
0000000000000000
0000000000000000000000
000000000000000000000000
0000000000000000000000000
我怎样把格式改成为第一个图那样呢?请高手指点啊!在此多谢多谢了!!!
作者: cm535 时间: 2011-7-24 11:12
补正常文件截图
作者: CUer 时间: 2011-7-24 12:10
回复 6# cm535 - sed "/^.\{10\}$/!d" a.txt >b.txt
复制代码
作者: cm535 时间: 2011-7-24 15:10
回复 6# cm535 sed "/^.\{10\}$/!d" a.txt >b.txt
复制代码
CUer老大,我试了一下,还是不行!
这是我的txt文件,请老大试一试,多谢多谢了!非常感谢!
作者: tmplinshi 时间: 2011-7-24 15:52
好难理解...
===========================================
按这个要求,结果应该是红色部分被删除:
1234567890
adassdscxvv
abcdefghij
_+";?.,asd
123456789001234 ← 大于 10 位的数字行
xcvfxbvfvcbbmn,hjkhkl
sdgdfgfdhgflkili66545
abcdefghijklllsa
0998766666dsgdsg
12345 ← 小于 10 位的数字行
0987 ← 小于 10 位的数字行
aad
===========================================
可是你最后一句却说:
结果为:
1234567890
adassdscxvv
abcdefghij
_+";?.,asd
123456789001234
xcvfxbvfvcbbmn,hjkhkl
sdgdfgfdhgflkili66545
abcdefghijklllsa
0998766666dsgdsg
12345
0987
aad
这样看来的话,楼主的意思是只保留 10 个字符的行,可是第二行却是 11 个字符的。。
理解你的题意真是太痛苦了...
===========================================
你弄错了两个地方:
1. 应该是删除大于 10 位数或小于 10 位数的行,而不是“如何删除txt中大于10位和小于10位的数字行?”
2. 测试数据不小心弄错了,第二行多了一位。
===========================================
如果是这么理解的话,希望楼主在顶楼更新一下,以免后来者痛苦。
作者: Batcher 时间: 2011-7-24 18:27
回复 9# cm535
请把附件上传到顶楼,以便他人下载测试。
作者: tmplinshi 时间: 2011-7-24 19:10
回复 6# cm535 sed "/^.\{10\}$/!d" a.txt >b.txt
复制代码
CUer老大,我试了一下,还是不行!
这是我 ...
cm535 发表于 2011-7-24 15:10
我测试是可以的。不会没下载 sed 吧?
作者: CUer 时间: 2011-7-24 19:11
回复 9# cm535
我试了,行。
可能是你的sed版本有问题吧。我用的4.2.1
作者: tmplinshi 时间: 2011-7-24 19:17
本帖最后由 tmplinshi 于 2011-7-24 19:39 编辑
aa.txt 里面只有换行符(0A),没有回车符(0D)。
多谢 CUer 提醒。more 有极限值,6 万多行的时候会暂停。所以以下命令不能处理楼主的文本。- more aa.txt | findstr "^..........$" >aa_10.txt
复制代码
作者: CUer 时间: 2011-7-24 19:21
回复 14# tmplinshi
3楼说实际txt文件有25万多行,more命令不是有限制吗?
作者: cm535 时间: 2011-7-24 19:22
sed放在系统的哪里啊?我还真不知道有没有?怎样看版本号。老大发一个给我吧!
作者: tmplinshi 时间: 2011-7-24 19:30
回复 tmplinshi
3楼说实际txt文件有25万多行,more命令不是有限制吗?
CUer 发表于 2011-7-24 19:21
忘记了...
作者: tmplinshi 时间: 2011-7-24 19:31
回复 16# cm535
GNU sed v4.0.7 单文件版(使用 -i 参数不生成备份文件)
http://bathome.net/thread-13353-1-1.html
作者: CUer 时间: 2011-7-24 19:37
回复 16# cm535
放在当前目录或者system32文件夹下
作者: cm535 时间: 2011-7-24 19:38
我搜索了一下,还真没有sed,
findstr的版本为5.1.2600
我下了一个,已经搞定!!!可以正常删除!多谢多谢老大!
aa.txt是什么编码格式,可以与常用的txt格式相互转换吗?
作者: CUer 时间: 2011-7-24 19:40
回复 20# cm535
试试Ultra Edit或者Notepad++之类的吧,应该都行。
作者: cm535 时间: 2011-7-24 22:43
非常感谢CUer及斑竹!
另外,如果是要删除txt中大于 12 位的数和小于 8 位数的行,又怎么办呢?不好意思,尽给你们出难题!!!
能不能帮我做个批处理,转换txt文件的回车符为换行符,换行符也可以转换为回车符!多谢了!
作者: CrLf 时间: 2011-7-24 22:50
本帖最后由 CrLf 于 2011-7-24 22:53 编辑
回复 22# cm535
纯批也可以完成 ansi 与 unicode 互转,也可以替换回车符与换行符,只是好像难以判断相邻的一对回车换行谁在前谁在后。
删除大于 12 字节和小于 8 字节的行(是字节不是字符):- findstr /v /x "......... .......... ..........." 1.txt
- ::用 findstr 的话,纯粹就是个体力活...
复制代码
作者: tmplinshi 时间: 2011-7-24 23:08
回复 22# cm535
转换成标准的换行(0D0A):复制代码
作者: tmplinshi 时间: 2011-7-24 23:13
本帖最后由 tmplinshi 于 2011-7-24 23:14 编辑
非常感谢CUer及斑竹!
另外,如果是要删除txt中大于 12 位的数和小于 8 位数的行,又怎么办呢?不好意思, ...
cm535 发表于 2011-7-24 22:43
保留 8~12 位的行:(直接修改文本)- sed -i "/^.\{8,12\}$/!d" aa.txt
复制代码
作者: cm535 时间: 2011-7-24 23:21
本帖最后由 cm535 于 2011-7-24 23:57 编辑
quote]回复 cm535
纯批也可以完成 ansi 与 unicode 互转,也可以替换回车符与换行符,只是好像难以判断 ...
CrLf 发表于 2011-7-24 22:50 [/quote]
运行了,不行!2.5M的文件没有减小,打开看了,与原来没有区别!还是要谢谢你哦!CrLf老大!
作者: cm535 时间: 2011-7-24 23:50
本帖最后由 cm535 于 2011-7-24 23:54 编辑
24楼及25楼的代码都运行成功,多谢tmplinshi老大,换行符转换成标准的回车符,太好了啊!
请问怎么转回来呢?即回车符转换成标准的换行符,什么搞?
这个论坛真是太好了!高手真多啊!佩服佩服!多谢多谢各位高手!
作者: tmplinshi 时间: 2011-7-25 11:39
请问怎么转回来 ...
cm535 发表于 2011-7-24 23:50
复制代码
作者: cm535 时间: 2011-7-25 12:35
谢谢tmplinshi斑竹,28楼代码试过,转换很快,很好!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |