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
Respuestas
¿Demasiados anuncios?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)