Cómo usar grep para mostrar nombres de archivos y números de línea antes de hacer coincidir las líneas

Concha de golpe

grep es una utilidad de Linux comúnmente utilizada para buscar contenido de archivos, o cualquier entrada que se le pase. Al buscar en varios archivos, es útil mostrar el nombre del archivo y los números de línea, especialmente cuando se usa para automatizar scripts de shells.

Mostrar nombres de archivo con grep

De forma predeterminada, si pasa varios archivos a grepse mostrará filename: antes de la línea correspondiente para mayor claridad. De hecho, puede desactivar este comportamiento con el -h bandera, que nunca mostrará los nombres de los archivos:

Sin embargo, si solo pasa un archivo a grep, no mostrará los nombres de archivo de forma predeterminada. Esto puede ser un problema cuando se automatiza con scripts de shell, ya que es posible que no sepa cuántos archivos hay en un directorio y puede romper la automatización dependiendo del nombre del archivo que está allí.

los la solución simple es usar mayúsculas -H banderaque hace lo contrario de -h y siempre activará los nombres de archivo sin importar qué, incluso con solo un archivo pasado como entrada.

grep -H "foo" file

los -H La bandera tiene otro efecto inesperado pero útil: cuando se combina con la entrada de stdincomo las tuberías de Unix, imprimirá (standard input): en lugar del nombre del archivo.

Mostrar números de línea con grep

También puede usarlo junto con el -n bandera para obtener el número de línea:

grep -Hn "foo"

Un truco compatible con POSIX

los -H bandera en grep no es compatible con POSIX y no está disponible en algunos sistemas operativos basados ​​en Unix más oscuros. Por suerte, hay un truco que puedes usar, pasando /dev/null como una entrada de segundo archivo falso para grepque lo engaña para que piense que hay varios archivos:

Deja un comentario

En esta web usamos cookies para personalizar tu experiencia de usuario.    Política de cookies
Privacidad