240 votos

¿Grep puede mostrar solamente las palabras que coinciden con el patrón de búsqueda?

Hay una manera de hacer grep salida de "palabras" a partir de los archivos que coincidan con la expresión de búsqueda?

Si quiero buscar todas las instancias de, digamos, "th" en un número de archivos que hacer;

grep "th" *

pero el resultado será algo así como (la negrita es mía);

algunos de archivo de texto : el gato se sentó en la estera
algunos-los demás-archivo de texto : el rápido zorro marrón
sin embargo, otro archivo de texto : espero que esto lo explica bien

Lo que yo quiero que a la salida, usando el mismo buscador, es;

el
el
el
este
a fondo

Es posible? O a través de otro/combinación de herramientas?

Gracias,

Neil

289voto

Dan Midwood Puntos 2569

Trata de grep -o

grep -oh "\w*th\w*" *

Edición: coincidencia de comentario de Phil

56voto

pico.creator Puntos 4094

Esta es una versión actualizada y la cruz de la distribución segura de la respuesta

grep -oh "[[:alpha:]]*th[[:alpha:]]*" 'filename'

A los resúmenes -oh salidas de la expresión regular coincide con el contenido del archivo (y no por su nombre de archivo), así como lo que usted esperaría de expresión regular para trabajar en vim/etc... ¿Qué palabra o expresión regular que estaría buscando, entonces, es para usted! Siempre que usted siga siendo POSIX y no la sintaxis de perl (consulte a continuación)

Más de la manual para grep

-o      Print each match, but only the match, not the entire line.
-h      Never print filename headers (i.e. filenames) with output lines.
-w      The expression is searched for as a word (as if surrounded by
         `[[:<:]]' and `[[:>:]]';

La razón por la que la respuesta original no funciona para todo el mundo

El uso de \w varía de una plataforma a otra, como una extensión de "perl" sintaxis. Como tal, aquellos grep instalación que se limita a trabajar con POSIX las clases de caracteres se utiliza [[:alpha:]] y no su perl equivalente \w. Ver la página de la Wikipedia sobre la expresión regular para obtener más

En última instancia, el POSIX respuesta anterior será mucho más fiable independientemente de la plataforma (el original) para grep

(PS: sé que la mayoría de las plataformas por ahora, habría sido parcheado para \w.... pero no siempre son los que se quedan detrás)

28voto

Adam Rosenfield Puntos 176408

Puede traducir espacios para saltos de línea y luego grep, por ejemplo:

cat * | tr ' ' '\n' | grep th

22voto

ghostdog74 Puntos 86060
Just awk...no need combination of tools

# awk '{for(i=1;i<=NF;i++){if($i~/^th/){print $i}}}' file
the
the
the
this
thoroughly

7voto

Raghu Puntos 61

comando grep para emparejar y perl

grep -o -P 'th.*? ' filename

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X