J'utilise la commande suivante pour grep stuff dans les sous-répertoires
find . | xargs grep -s 's:text'
Cependant, cela trouve également des trucs comme <s:textfield name="sdfsf"...../>
Que puis-je faire pour éviter cela afin qu'il trouve juste des trucs comme <s:text name="sdfsdf"/>
OU d'ailleurs .... trouve également <s:text somethingElse="lkjkj" name="lkkj"
fondamentalement s:text
et name
devraient être sur la même ligne ....
Vous voulez le -w
option pour spécifier que c'est la fin d'un mot.
find . | xargs grep -sw 's:text'
Utilisation \b
pour correspondre aux "limites de mots", ce qui rendra votre recherche correspondante sur des mots entiers uniquement.
Donc, votre grep ressemblerait à quelque chose comme
grep -r "\bSTRING\b"
l'ajout de couleurs et de numéros de ligne peut aussi aider
grep --color -rn "\bSTRING\b"
De http://www.regular-expressions.info/wordboundaries.html :
Il existe trois positions différentes qui peuvent être considérées comme des limites de Word:
- Avant le premier caractère de la chaîne, si le premier caractère est un caractère Word.
- Après le dernier caractère de la chaîne, si le dernier caractère est un caractère Word.
- Entre deux caractères de la chaîne, où l'un est un caractère Word et l'autre n'est pas un caractère Word.
Vous pouvez supprimer la commande xargs
en effectuant une recherche grep récursivement. Et vous n'avez normalement pas besoin du drapeau 's'. Par conséquent:
grep -wr 's:text'
Si vous souhaitez simplement filtrer la partie de texte restante, vous pouvez le faire.
xargs grep -s 's:text '
Cela ne devrait trouver que s:text
instances avec un espace après le dernier t. Si vous avez besoin de trouver s:text
instances qui n'ont qu'un élément name, soit dirigez vos résultats vers une autre expression grep
, soit utilisez regex pour filtrer uniquement les éléments dont vous avez besoin.