Board logo

标题: 【出题】考考大家对批处理中findstr的用法 [打印本页]

作者: 随风    时间: 2008-3-6 00:43     标题: 【出题】考考大家对批处理中findstr的用法

给大家出个题,考考大家对findstr的用法。
a.txt内容如下
要求:必须使用findstr命令
      显示 bbs.bathome.net
      显示 youxi01.vip2.92idc.com/index.php
      即显示所有以\ \开头的行
不知能否实现?我也没试过
  1. a.txt 内容
  2. \X
  3. \ \bbs.bathome.net                    
  4. \\bbb            
  5. \\ \c           
  6. \\\xxx
  7. \\xx
  8. \ \youxi01.vip2.92idc.com/index.php
  9. \ \
  10. \\\\xxxx
复制代码

作者: youxi01    时间: 2008-3-6 07:50

研究规律,应该是\  \开头的行吧?(而且除\  \之外还不能是空内容)

这个用findstr+正则即可实现
作者: 希望的寄托    时间: 2008-3-6 10:10

用显示\ \开头的我显示之后没有显示,要是用\\中间没有空格的就会全部显示
真不知道\ \在这里怎么查,结果我用.查的
for /f "tokens=1* delims=" %%i in ('findstr /c:"." a.txt') do echo %%i %%j
作者: abcd    时间: 2008-3-6 16:03

findstr /r /c:"^\\ \\." a.txt
作者: 随风    时间: 2008-3-6 16:18

原帖由 abcd 于 2008-3-6 16:03 发表
findstr /r /c:"^\\ \\." a.txt


不错不错,我没加 r 参数,难怪老是不对,
对 r 参数仍不是很理解,什么叫一般表达试?
作者: 希望的寄托    时间: 2008-3-6 22:24

是的喔
  /R        将搜索字符串作为一般表达式使用。
这是个什么意思喔
作者: 小竹    时间: 2008-3-11 15:14

楼上几位真的是受害者。
findstr/?得到帮助,但翻译水平实在不怎么样。建议在command下findstr/?得到英文帮助。
“一般表达式”其实是“regular expressions”,即“正则表达式”。
作者: CarlK    时间: 2009-4-24 05:22     标题: Hi, Everyone.

try this:
findstr ^^[\\] a.txt

works verywell.
这里使用了转义符 ^ 和 \ .

如果只显示网址, 可用:
findstr "\<\\.*\." a.txt.

[ 本帖最后由 CarlK 于 2009-4-24 06:50 编辑 ]
作者: Hello123World    时间: 2011-6-13 17:28

7楼根本没说到点子上——这跟翻译无关,是其他各位看帮助看的不够仔细:

一般表达式的快速参考:  .        通配符: 任何字符
  *        重复: 以前字符或类出现零或零以上次数
  ^        行位置: 行的开始
  $        行位置: 行的终点
  [class]  字符类: 任何在字符集中的字符
  [^class] 补字符类: 任何不在字符集中的字符
  [x-y]    范围: 在指定范围内的任何字符
  \x       Escape: 元字符 x 的文字用法
  \<xyz    字位置: 字的开始
  xyz\>    字位置: 字的结束
作者: Hello123World    时间: 2011-6-13 17:36

findstr /r /c:"^\\ \\." a.txt

findstr "\<\\.*\." a.txt.

都可以。
作者: CrLf    时间: 2011-6-13 17:45

10# Hello123World

findstr "\<\\.*\." a.txt.这句并不准确,\<类似于[ ->]*,和^不同。
另外微软的自带翻译确实不咋地,典型的例子一个是r开关,另一个是对\的解释...
作者: 601997526    时间: 2011-6-13 23:12

10# Hello123World  

findstr "\
zm900612 发表于 2011-6-13 17:45

^          行位置: 行的开始
\<xyz    字位置: 字的开始
能给讲讲这两个的不同之处到底在哪吗
最好能实例说明,我对正则还不太了解,但就我现在所用到的来说好像都是一样的,没有区别
作者: CrLf    时间: 2011-6-14 16:25

本帖最后由 zm900612 于 2011-6-14 16:26 编辑

12# 601997526


^代表匹配句首,与/b作用相同,只是^是匹配单条关键词而/b是匹配所有关键词。所以findstr /rc:"^\\ \\"等于findstr /bc:"\ \"

而\<代表匹配词首,而什么叫做词呢,按我的理解,它是两个分隔符之间的字符串,这个分隔符可以是除了数字和大小写之外的所有单字节字符,按照findstr中字符的实际大小来排列,是指字符顺序中从空格到>之间的字符(剩下的单字节字符都是数字和字母),所以findstr /rc:"\<\\ \\"等于findstr /rc:"[ ->]*\\ \\"。不过按这个观点来看,\<应该存在误把汉字当做分隔符的bug(因为findstr是以匹配字节的方式来进行搜索,所以应该会把ansi中的宽字节当成两个字节来匹配)。

^和\<的区别在这题中没有体现出来,但是举一个简单的例子可能就可以讲清楚了:
  1. @prompt 命令:
  2. findstr /rc:"^/rc" %~nx0
  3. pause>nul
  4. findstr /brc:"/rc" %~nx0
  5. pause>nul
  6. findstr /rc:"\</rc" %~nx0
  7. pause>nul
  8. findstr /rc:"[ ->]*/rc" %~nx0
  9. pause>nul
复制代码





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