usar txt siguientes sera script por líneas lineas linea leer las fichero extraer examples devuelta cuál comando file grep

file - txt - ¿Cómo puedo hacer que ''grep'' muestre una sola línea cinco líneas sobre la línea grepped?



shell script leer fichero y extraer lineas (4)

He visto algunos ejemplos de líneas de grepping antes y después, pero me gustaría ignorar las líneas medias. Entonces, me gustaría la línea cinco líneas antes, pero nada más. Se puede hacer esto?


Así es más fácil para mí:

grep --no-group-separator -B5 "pattern" file | sed -n 1~5p

Este grapado 5 líneas antes e incluyendo el patrón, desactiva el --- separador de grupo, luego imprime cada 5a línea.


Esta es la opción -B

-B NUM, --before-context=NUM Print NUM lines of leading context before matching lines. Places a line containing -- between contiguous groups of matches.


Ok, creo que esto hará lo que buscas. Buscará un patrón y extraerá la quinta línea antes de cada partido.

grep -B5 "pattern" filename | awk -F ''/n'' ''ln ~ /^$/ { ln = "matched"; print $1 } $1 ~ /^--$/ { ln = "" }''

básicamente, cómo funciona esto es que toma la primera línea, la imprime y luego espera hasta que vea ^--$ (el separador de coincidencias usado por grep), y comienza de nuevo.


Si solo quieres tener la quinta línea antes del partido, puedes hacer esto:

grep -B 5 pattern file | head -1

Editar:
Si puedes tener más de una coincidencia, puedes intentar esto (intercambiar pattern con tu patrón real):

sed -n ''/pattern/!{H;x;s/^.*/n/(.*/n.*/n.*/n.*/n.*/)$//1/;x};/pattern/{x;s/^/([^/n]*/).*$//1/;p}'' file

Tomé esto de un tutorial de Sed , sección: Manteniendo más de una línea en el búfer de espera , ejemplo 2 y lo adapté un poco.