标题: 【出题】考考大家对批处理中findstr的用法 [打印本页]
作者: 随风 时间: 2008-3-6 00:43 标题: 【出题】考考大家对批处理中findstr的用法
给大家出个题,考考大家对findstr的用法。
a.txt内容如下
要求:必须使用findstr命令,
显示 bbs.bathome.net
显示 youxi01.vip2.92idc.com/index.php
即显示所有以\ \开头的行
不知能否实现?我也没试过。
- a.txt 内容
- \X
- \ \bbs.bathome.net
- \\bbb
- \\ \c
- \\\xxx
- \\xx
- \ \youxi01.vip2.92idc.com/index.php
- \ \
- \\\\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中的宽字节当成两个字节来匹配)。
^和\<的区别在这题中没有体现出来,但是举一个简单的例子可能就可以讲清楚了:- @prompt 命令:
- findstr /rc:"^/rc" %~nx0
- pause>nul
- findstr /brc:"/rc" %~nx0
- pause>nul
- findstr /rc:"\</rc" %~nx0
- pause>nul
- findstr /rc:"[ ->]*/rc" %~nx0
- pause>nul
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |