2010-05-21 17 views
44

estoy usando el siguiente comando para grep cosas en subdirectoriosCómo GREP para toda la palabra

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

Sin embargo, esto también encuentra cosas por el estilo <s:textfield name="sdfsf"...../>

¿Qué puedo hacer para evitar que por lo que sólo encuentra cosas como <s:text name="sdfsdf"/>

o para el caso .... también encuentra <s:text somethingElse="lkjkj" name="lkkj"

básicamente s:text y name deben estar en la misma línea ....

+17

¿Alguien leyó el título como "la forma de grep para el conjunto ** ** mundo"? – Earlz

+1

para lulz :) – josh

+7

@Earlz, no, principalmente porque busqué en Google "grep whole word". –

Respuesta

49

Desea que la opción -w especifique que es el final de una palabra.

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

0

Si solo desea filtrar el resto del texto, puede hacerlo.

xargs grep -s 's:text '

Esto debe encontrar sólo s:text casos con un espacio después del último t. Si necesita encontrar instancias de s:text que solo tengan un elemento de nombre, canalice sus resultados a otra expresión grep, o use regex para filtrar solo los elementos que necesita.

+0

¿Qué sucede si el "texto" está al final de la salida? ¿No se saltará en su solución? – pkuszewski

22

Usted puede dejar el comando xargs al hacer la búsqueda grep de forma recursiva. Y normalmente no necesitas la bandera 's'. Por lo tanto:

grep -wr 's:text' 
23

Uso \b para que coincida con el "límites de las palabras", que harán que su partido sólo de búsqueda de palabras completas.

Así que su grep sería algo como

grep -r "\bSTRING\b" 

añadiendo números de color y línea podría ayudar también

grep --color -rn "\bSTRING\b" 

De http://www.regular-expressions.info/wordboundaries.html:

Hay tres posiciones diferentes que califican como límites de palabras:

  • Antes del primer carácter de la cadena, si el primer carácter es un carácter de palabra .
  • Después del último carácter en la cadena, si el último carácter es un carácter de palabra.
  • Entre dos caracteres en la cadena, donde uno es un carácter de palabra y el otro no es un carácter de palabra.
0

podría intentar RG, https://github.com/BurntSushi/ripgrep:

rg -w 's:text' . 

debe hacerlo

+0

Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. - [De la crítica] (/ review/low-quality-posts/17780631) –

+1

Proporcioné la respuesta: rg -w 's: text'. – ms4720

Cuestiones relacionadas