次のようなステートメントの出現について特定のディレクトリ内のすべてのファイルを検索したい
Load frmXYZ
私はfindstr
コマンドを使用してWindows 7にいます。私は試した:
findstr /n Load.*frm *.*
しかし、これにより次のような望ましくない結果が得られます。
If ABCFormLoaded Then Unload frmPQR
そこで、Load
とfrm
の間に空白スペースを入れて、次のようなコマンドを指定しようとしました。
findstr /n Load frm *.*
しかし、これは、Word load
のすべての出現またはWord frm
のすべての出現を検索しました。この問題を回避するにはどうすればよいですか?
スペースを使用する場合、/C:
オプションを使用して、リテラル文字列を正規表現/R
オプションに渡す必要があります。
正規表現に到達すると、正規表現として扱われます。
とはいえ、これは典型的なMSのゴミです。
一番下の行は、2つの文字列を使用して次の場合を処理する必要があるということです。Load frm
は次のように先頭にあります。
Load frm apples bananas carrots
または途中で:
some other text Load frm and more
。以下はXP sp3を使用しています。windows7は異なる場合があり、両方ともゴミです!
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
です
使用 /c
オプション:
findstr /n /c:"Load frm" *.*
ヘルプから(findstr /?
):
/C:string Uses specified string as a literal search string.
特別な\<
「Wordの始まり」正規表現記号を使用しました。
FindstrのWin10バージョンでこれを試しました。しかし、Microsoftによれば、この特別な \<
シンボルは、WinXP以来findstr.exe
にありました です。
以下で機能しない多くのオプションの完全な(そして苦痛な)内訳。
一番下:実際に機能したもの。
C:\>type lines.txt
Load frmXYZ // This line should match.
If ABCFormLoaded Then Unload frmPQR // This line should NOT match.
pears Load frm grapes pineapples // This line should match.
// This blank line should NOT match.
LOAD FRMXYZ // This line should match.
IF ABCFORMLOADED THEN UNLOAD FRMPQR // This line should NOT match.
PEARS LOAD FRM GRAPES PINEAPPLES // This line should match.
// This blank line should NOT match.
load frmxyz // This line should match.
if abcformloaded then unload frmpqr // This line should NOT match.
pears load frm grapes pineapples // This line should match.
C:\>type lines.txt | findstr /N "Load frm"
1:Load frmXYZ // This line should match.
2:If ABCFormLoaded Then Unload frmPQR // This line should NOT match.
3:pears Load frm grapes pineapples // This line should match.
9:load frmxyz // This line should match.
10:if abcformloaded then unload frmpqr // This line should NOT match.
11:pears load frm grapes pineapples // This line should match.
C:\>type lines.txt | findstr /N /R "Load frm"
1:Load frmXYZ // This line should match.
2:If ABCFormLoaded Then Unload frmPQR // This line should NOT match.
3:pears Load frm grapes pineapples // This line should match.
9:load frmxyz // This line should match.
10:if abcformloaded then unload frmpqr // This line should NOT match.
11:pears load frm grapes pineapples // This line should match.
C:\>type lines.txt | findstr /N /R /C:"Load frm"
1:Load frmXYZ // This line should match.
3:pears Load frm grapes pineapples // This line should match.
C:\>type lines.txt | findstr /N /R /I /C:"Load frm"
1:Load frmXYZ // This line should match.
2:If ABCFormLoaded Then Unload frmPQR // This line should NOT match.
3:pears Load frm grapes pineapples // This line should match.
5:LOAD FRMXYZ // This line should match.
6:IF ABCFORMLOADED THEN UNLOAD FRMPQR // This line should NOT match.
7:PEARS LOAD FRM GRAPES PINEAPPLES // This line should match.
9:load frmxyz // This line should match.
10:if abcformloaded then unload frmpqr // This line should NOT match.
11:pears load frm grapes pineapples // This line should match.
C:\>type lines.txt | findstr /N /R /C:"\<Load frm"
1:Load frmXYZ // This line should match.
3:pears Load frm grapes pineapples // This line should match.
C:\>type lines.txt | findstr /N /R /I /C:"\<Load frm"
1:Load frmXYZ // This line should match.
3:pears Load frm grapes pineapples // This line should match.
5:LOAD FRMXYZ // This line should match.
7:PEARS LOAD FRM GRAPES PINEAPPLES // This line should match.
9:load frmxyz // This line should match.
11:pears load frm grapes pineapples // This line should match.