[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 【已解决】findstr命令表达补集错误?

本帖最后由 bluewing009 于 2011-11-23 22:38 编辑

解决6楼

1.我想在1.txt文本里找到 不含 pause和echo 的显示行(显示行就是echo 没有>),就是:不含 pause和 echo且没有>的 行
我是这么写的:findstr /v "echo.*[^^^>] pause" 1.txt
结果错误
2.我尝试补集的写法findstr echo.*[^^^>] 1.txt
结果是:echo行和echo >行

问题:[^]不是补集么?应该是不含有补集内的元素,为什么2中都输出了
我如果想达到开头所说的目的如何写呢?

举例
  1. echo 000
  2. echo 3234
  3. pause
  4. djkllls
  5. dfsdk
  6. echo asdas>11.txt
  7. echo asdas>>11.txt
复制代码


变成
  1. djkllls
  2. dfsdk
  3. echo asdas>11.txt
  4. echo asdas>>11.txt
复制代码


例子中echo 行没有>排除了
1

评分人数

    • CrLf: 感谢给帖子标题标注[已解决]字样PB + 2

标题

回复 2# yyykkkyyyy


    /v  echo[^>]*[>]的结果是显示echo 不包含>的行,与我的题意正好相反,但是我反推/v  echo[^>]*[^>]应该是显示不包含“echo 没有>的”,结果所有echo都不显示……

TOP

然后我这样findstr echo[^>]*应该是显示echo且没有>的行吧?结果都显示了

TOP

本帖最后由 bluewing009 于 2011-11-22 23:23 编辑

奇怪的是如果直接写findstr [^>]*[^>] 按照理解应该显示“没有>”的行,结果除了开头为>没显示,其他都显示了,也包括行中间含有>

不明白……
还有findstr .*[^>]应该显示所有行尾不是>的行……但是也显示了……

TOP

本帖最后由 bluewing009 于 2011-11-23 10:27 编辑

回复 6# yyykkkyyyy


    那就分条说
1.有一个文本,各种命令都有
2.其中echo命令的行可分为有>和没有>的两种情况
3.需要显示除echo外的命令,以及echo行中含有>的行
4.换句话说,就是把echo的单独行(只有echo没有>)剔除出去
这样说明白了么?

另:如果去掉v就变成findstr "echo[^>]*[>] pause" 1.txt
这句话就是:找到echo且有>的和pause的行……

TOP

回复 7# awk


    额…………主要是findstr一般表达式运用不是很清楚……特别是补集
总是选不出希望的结果

TOP

回复 10# yyykkkyyyy


   初步测试可以。先谢谢你解决问题~  但是不是很明白原理.....
findstr/v "echo[^>]*$ pause" 1.txt
.        通配符: 任何字符
*        重复: 以前字符或类别出现零或零以上次数
^        行位置: 行的开始
$        行位置: 行的终点
[class]  字符类别: 任何在字符集中的字符
[^class] 补字符类别: 任何不在字符集中的字符        

这句话我奇怪为什么$,这个“行的终点”怎么讲?
我自己写的  findstr/v "echo[^>]*[>][^>]*  pause" 1.txt  我以为:
排除 (/v)echo行中间没有>重复,然后有> 的行
因为格式
echo dasdasds>1.txt
规律
echo 中间重复 > 其他不是>的字符  
所以我照着搬下来 findstr/v "echo[^>]*[>][^>]*
但是结果为
  1. djkllls
  2. dfsdk   
复制代码

为何呢?

TOP

本帖最后由 bluewing009 于 2011-11-23 20:10 编辑

回复 12# Hello123World


    这句话把所有echo 都打死了   thanks anyway

findstr /lv "pause echo >" 1.txt
这就排除了 含pause 行 含echo 行 含>行
而我需要的是 排除echo 且没有>的行......

6L可行

TOP

标题

回复 15# yyykkkyyyy


    还是有疑问……
findstr/v echo[^>]*[>][^>]*
这样不就是echo 一段没有>的字符,然后是>,再加上一段没有>的字符,这不是符合echo adgjmptw >1.txt
但是为什么连echo adm这类的也算上了呢?这符合 echo[^>]*而不是 echo[^>]*[>][^>]*丫,这不是要求“echo 非>字符 > 非>字符”echo adm这句话没有>怎么也算上了呢?

TOP

回复 18# yyykkkyyyy


    哎……我自己再琢磨一下吧,不过很感谢你帮我解决这个问题,代码就能精简一下了……

再次感谢~

TOP

返回列表