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

【出题】考考大家对批处理中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
复制代码
技术问题请到论坛发帖求助!

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

这个用findstr+正则即可实现

TOP

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

TOP

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

评分人数

TOP

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


不错不错,我没加 r 参数,难怪老是不对,
对 r 参数仍不是很理解,什么叫一般表达试?
技术问题请到论坛发帖求助!

TOP

是的喔
  /R        将搜索字符串作为一般表达式使用。
这是个什么意思喔

TOP

楼上几位真的是受害者。
findstr/?得到帮助,但翻译水平实在不怎么样。建议在command下findstr/?得到英文帮助。
“一般表达式”其实是“regular expressions”,即“正则表达式”。

TOP

Hi, Everyone.

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

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

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

[ 本帖最后由 CarlK 于 2009-4-24 06:50 编辑 ]

TOP

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

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

TOP

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

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

都可以。

TOP

10# Hello123World

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

TOP

10# Hello123World  

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

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

TOP

本帖最后由 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
复制代码

TOP

返回列表