genera líneas vecinas con números de línea mientras haces grepping

genera líneas vecinas con números de línea mientras haces grepping

¿Hay alguna manera de generar las líneas vecinas junto con los números de línea mientras se recopila el contenido de un archivo? Estoy intentando obtener resultados del formulario:

$ ~/myscript.sh download file # 'download' being the pattern here
121: # and downloads with wget/curl, whichever is available.
122: download_file () {
123:  if which wget &>/dev/null; then
----------
356: # Since the prerequisites are already installed, we may proceed
357: download_urls=("http://example.com/foo/bar.bz2"
358:                "http://d1.example.com/xyz/abc.tar.gz"

Por supuesto, sé que puedo grep mi patrón con la -nopción y mostrar algunas de las líneas vecinas del número de línea obtenido (digamos, usando cualquiera de los métodosaquí), pero ¿hay una mejor manera de hacer esto?

Respuesta1

Puede utilizar grepel control de línea de contexto de GNU, desde man grep:

-A NUM, --after-context=NUM
Imprime NUM líneas del contexto final después de las líneas coincidentes. Coloca una línea que contiene un separador de grupo (--) entre grupos contiguos de coincidencias. Con la opción -o o --only-matching, esto no tiene ningún efecto y se muestra una advertencia.


-B NUM, --before-context=NUM
Imprime NUM líneas del contexto inicial antes de las líneas coincidentes. Coloca una línea que contiene un separador de grupo (--) entre grupos contiguos de coincidencias. Con la opción -o o --only-matching, esto no tiene ningún efecto y se muestra una advertencia.

Si necesita la misma cantidad de líneas en cada lado, puede usar un único número de contexto:

-C NUM, -NUM, --context=NUM
Imprime NUM líneas del contexto de salida. Coloca una línea que contiene un separador de grupo (--) entre grupos contiguos de coincidencias. Con la opción -o o --only-matching, esto no tiene ningún efecto y se muestra una advertencia.

Cuando se combina con la -nbandera ( --line-number), tiene coincidencias numeradas con el contexto circundante.

En tu ejemplo:

grep -n -C1 download

información relacionada