Para grep 20 caracteres después y antes del partido

14

Tengo el problema de que obtengo demasiada información después del partido para

grep -RnisI --color=auto "pseudomonas" *

Quiero obtener solo 20 caracteres o 10 palabras después y antes del partido.

¿Cuál es la herramienta adecuada para hacer tal cosa?

Léo Léopold Hertz 준영
fuente
1
Su conjunto de opciones es un poco extraño cuando se queja de demasiada información. ¿Desea que aparezca una línea después y antes de su coincidencia ( -A1y -B1resp.), Pero es demasiado? ¿Dónde exactamente quiere que se recorte su producción?
Andreas Wiese
1
¿Puedes dar una entrada de ejemplo y la salida que estás esperando?
Ramesh
He alterado el comando, lo pruebo en Ubuntu 13.10, avíseme si funciona para usted. Tengo una opción grep y una opción egrep
Eric
Ver también Contexto de la expresión regular coincidente
Stéphane Chazelas

Respuestas:

23
cat file.txt | grep -o -P '.{0,20}string.{0,20}'

Esto debería hacerlo por ti

Actualizar:

Si no quieres usar cat, puedes usar grep con el archivo como parámetro:

grep -o -P '.{0,20}pseudomonas.{0,20}' FileName.html

Además, The -P usa Perl Regex, que según las páginas del manual es experimental, si desea evitar esa bandera, puede usar egrep en su lugar:

grep -Eo '.{0,20}yourstring.{0,20}' yourtestfile.txt
Eric
fuente
Qué archivo de prueba feo tienes;)
Ouki
El resto del archivo es realmente útil, eso es parte de un comentario de varias líneas en medio de un Esquema que tuvo que ser excluido sin romper nuestro analizador, era solo una buena línea para probarlo.
Eric
Como es uno de mis archivos, está configurado en 755, pero puedo ver cómo cat podría no ser ideal para un archivo HTML, puede intentar pasar el nombre del archivo a grep como parámetro, vea mi edición.
Eric
Quiero decir con 777 archivos que tienes 777 copias de diferentes archivos, no lo conocido. Ejecuto $$$ egrep -o '. {0,20} pseudomonas. {0,20}' * $$$. El comando permanece allí infinito y no hace nada. Esto parece funcionar de nuevo $$$ egrep -ori '. {0,20} pseudomonas. {0,20}' * $$$. Lo mismo con la recursividad y con mayúsculas y minúsculas. Sin embargo, es muy lento. Creo que no debería ser tan lento. Grep fue considerablemente más rápido.
Léo Léopold Hertz 준영
si la captura no funciona, siempre puede ponerla en un archivo agregando > results.txtal final de su comando, pero no le dirá en qué archivo la encontró.
Eric
4
pcregrep -MnirIso '(?s).{0,20}pseudomonas.{0,20}' . |
  grep --color -e '^' -e pseudomonas

Asume que las coincidencias y su contexto no se superponen y que los nombres de archivo no contienen pseudomonas.

También tenga en cuenta que los números de línea informados son los del comienzo del contexto.

Stéphane Chazelas
fuente