我想搜索某个目录中所有文件的出现情况,例如
Load frmXYZ
我在Windows 7上,使用
findstr
命令。我试过了: findstr /n Load.*frm *.*
但这给了我不想要的结果,例如:
If ABCFormLoaded Then Unload frmPQR
所以我尝试在
Load
和frm
之间放置一个空格,并给出如下命令: findstr /n Load frm *.*
但这只是搜索单词
load
的所有出现或单词frm
的所有出现。我如何解决这个问题? 最佳答案
如果使用空格,则需要/C:
选项将文字字符串传递给regex /R
选项。
一旦到达正则表达式,就将其视为正则表达式。
就是说,这是典型的MS垃圾。
使用两个正则表达式搜索字符串
最重要的是,您必须使用2个字符串来处理以下情况:Load frm
是这样的开头:
Load frm apples bananas carrots
或在中间像这样:
some other text Load frm and more
。 没有字符类的版本
下面是使用XP sp3,Windows 7可能有所不同,两者都是垃圾!
findstr /N /R /C:" *Load *frm" /C:"^Load *frm" test.txt
7:Load frm is ok
8: Load frm is ok
注意结肠
注意:
/C:
中的冒号是强制性的,此项才能起作用。如果省略冒号,则
findstr
的错误处理只是将/C
视为无效选项,请忽略该无效选项并继续进行。导致意外和不必要的输出。使用字符类的等效版本
findstr /N /R /C:"[ ][ ]*Load[ ][ ]*frm" /C:"^Load[ ][ ]*frm" test.txt
角色分类细目
// The first regex search string breaks down like this:
[ ] // require 1 space
[ ]* // optional many spaces
Load // literal 'Load'
[ ] // require 1 space
[ ]* // optional many spaces
frm // literal 'frm'
// The second regex search string breaks down like this:
^ // beginning of line
Load // literal 'Load'
[ ] // require 1 space
[ ]* // optional many spaces
frm // literal 'frm'
真正的正则表达式可能是
\bLoad\s+frm
关于regex - 如何编写搜索模式以在findstr中包含空格?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9789563/