web-dev-qa-db-fra.com

Comment chercher le mot entier

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 ....

62
josh

Vous voulez le -w option pour spécifier que c'est la fin d'un mot.

find . | xargs grep -sw 's:text'

71
Derek H

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.
46
cs01

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' 
26
joctee

vous pouvez essayer rg, https://github.com/BurntSushi/ripgrep :

rg -w 's:text' . 

devrait le faire

1
ms4720

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.

0
Stefan Kendall