Je souhaite rechercher dans tous les fichiers d'un certain répertoire des occurrences d'instructions telles que
Load frmXYZ
Je suis sous Windows 7, en utilisant la commande findstr
. J'ai essayé:
findstr /n Load.*frm *.*
Mais cela me donne des résultats indésirables tels que:
If ABCFormLoaded Then Unload frmPQR
J'ai donc essayé de mettre un espace vide entre Load
et frm
et j'ai donné la commande comme ceci:
findstr /n Load frm *.*
Mais cela a simplement recherché toutes les occurrences du mot load
ou toutes les occurrences du mot frm
. Comment contourner ce problème?
Si vous utilisez des espaces, vous avez besoin du /C:
option pour passer la ou les chaînes littérales à l'expression régulière /R
option.
Une fois qu'il arrive au regex, il est traité comme un regex.
Cela dit, il s'agit d'une corbeille MS typique.
L'essentiel est que vous devez utiliser 2 chaînes pour gérer les cas oùLoad frm
est au début comme ceci:
Load frm apples bananas carrots
OU au milieu comme ça:
some other text Load frm and more
.Ci-dessous utilise XP sp3, Windows 7 peut être différent, les deux sont des ordures!
findstr /N /R /C:" *Load *frm" /C:"^Load *frm" test.txt
7:Load frm is ok
8: Load frm is ok
REMARQUE: Les deux points dans /C:
est OBLIGATOIRE pour que cela fonctionne.
Si vous omettez les deux-points, la gestion des erreurs de findstr
consiste simplement à traiter /C
comme option non valide, ignorez cette option non valide et continuez quand même. Menant à une sortie inattendue et indésirable.
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'
Un vrai regex pourrait être \bLoad\s+frm
Utilisez le /c
option:
findstr /n /c:"Load frm" *.*
De l'aide (findstr /?
):
/C:string Uses specified string as a literal search string.
J'ai utilisé le symbole regex spécial \<
"Début de Word".
J'ai essayé ceci sur la version Win10 de findstr. Mais selon Microsoft, ce symbole spécial \<
Est dans findstr.exe
Depuis WinXP .
Décomposition complète (et douloureuse) de nombreuses options qui ne fonctionnent PAS ci-dessous.
Tout en bas: ce qui a réellement fonctionné.
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.