标题: [文本处理] 批处理findstr /x参数为何查找错误? [打印本页]
作者: czjt1234 时间: 2010-12-30 13:27 标题: 批处理findstr /x参数为何查找错误?
g:\d.txt 里面就一行
111
但
findstr /x /i "111" g:\d.txt
始终查找不成功
今天研究findstr,死了N多脑细胞
最后才知道问题在哪里
哈哈,有没人知道啊,晚上来看
作者: hanyeguxing 时间: 2010-12-30 13:56
如果g为参数:
1,语法错误:g:\d.txt 应该写成 /g:d.txt
2,语法错误: "匹配内容" 和 /g 不可以同时存在
如果g为盘符:
1,要求 111 所在行最后换行(0d 0a)。如果没有,则:type g:\d.txt|findstr /x /i "111"
2,要求编码为ANSI。如果为Unicode,则:type g:\d.txt|findstr /x /i "111"
[ 本帖最后由 hanyeguxing 于 2010-12-30 19:05 编辑 ]
作者: FOR 时间: 2010-12-30 14:16
原帖由 hanyeguxing 于 2010-12-30 13:56 发表
1,语法错误:g:\d.txt 应该写成 /g:d.txt
2,语法错误: "匹配内容" 和 /g 不可以同时存在
难道就不能是 g盘的d.txt吗?
作者: Batcher 时间: 2010-12-30 15:12
- type 1.txt | findstr /x "BatHome"
复制代码
- findstr /x "BatHome" < 1.txt
复制代码
作者: czjt1234 时间: 2010-12-30 20:44
不好意思,忘记说了
findstr /i "111" g:\d.txt
不加 /x 参数是可以执行成功的
最后研究结果
g:\d.txt 文件里的
111
后面加个回车,则 /x 参数就可识别该行
若是没有回车,/x 参数认为这不是一个完整的行,就不能完全匹配了
作者: czjt1234 时间: 2010-12-30 20:48
由于我没多加几行测试,那样肯定知道最后一行有问题
只弄了一行,结果就郁闷了
版主正确:
如果g为盘符:
1,要求 111 所在行最后换行(0d 0a)。如果没有,则:type g:\d.txt|findstr /x /i "111"
作者: tmplinshi 时间: 2010-12-30 21:05
测试发现,如果文本内只有 1 个字节的字符,用 type 会失败。
例如:
1、文本内只有“1”这个字符,且没有换行,用 type d.txt | findstr /x "1" 会失败,用 more 成功;
2、文本内只有“字”这个字符,且没有换行,用 type d.txt | findstr /x "字" 成功
--------------------------
如果最后一行不是空行,findstr /x "BatHome" < 1.txt 会卡住。
[ 本帖最后由 tmplinshi 于 2010-12-30 21:10 编辑 ]
作者: Batcher 时间: 2010-12-30 23:47 标题: 回复 7楼 的帖子
你是XP系统?
我的Vista SP2里面一切正常。
作者: tmplinshi 时间: 2010-12-31 00:05 标题: 回复 8楼 的帖子
恩,XP SP2
作者: powerbat 时间: 2010-12-31 02:41
对findstr的Bug已经见怪不怪了。
在某帖子里看到版主说过,findstr要求的换行至少要有\r,即\r或\r\n都行,但Linux格式的换行\n则不识别。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |