我想搜索某个目录中所有文件的出现情况,例如

  Load frmXYZ

我在Windows 7上,使用findstr命令。我试过了:
  findstr /n Load.*frm *.*

但这给了我不想要的结果,例如:
 If ABCFormLoaded Then Unload frmPQR

所以我尝试在Loadfrm之间放置一个空格,并给出如下命令:
 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/

    10-10 17:35