227 lines
12 KiB
Plaintext
227 lines
12 KiB
Plaintext
|
|
Sintaxis del comando grep
|
|
El comando grep espera un patrón y argumentos opcionales junto con una lista de archivos si se usa sin tubería.
|
|
$ grep [options] pattern [files]
|
|
|
|
Un ejemplo sencillo es:
|
|
$ grep my file.txt
|
|
my_file
|
|
$
|
|
|
|
---BUSCAR LO QUE EMPIECE POR '^\'
|
|
Con la expresión '^\[privi' busca todo lo que empieza por privi:
|
|
grep '^\[privi' .ansible.cfg
|
|
|
|
---Searching Multiple Files
|
|
grep le permite buscar el patrón dado no solo en uno sino en varios archivos. A continuación, le mostramos cómo puede buscar un patrón en varios archivos utilizando * comodín.
|
|
$ sudo grep -i [pattern] [files]
|
|
Salida:
|
|
$ sudo grep err /var/log/messages*
|
|
/var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: Using IOAPIC for interrupt routing
|
|
/var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: PCI Interrupt Link [LNKA] (IRQs 5 9 10 *11)
|
|
/var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: PCI Interrupt Link [LNKB] (IRQs 5 9 *10 11)
|
|
/var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: PCI Interrupt Link [LNKC] (IRQs 5 *9 10 11)
|
|
/var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: PCI Interrupt Link [LNKD] (IRQs 5 9 10 *11)
|
|
/var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: Using IOAPIC for interrupt routing
|
|
/var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: PCI Interrupt Link [LNKA] (IRQs 5 9 10 *11)
|
|
/var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: PCI Interrupt Link [LNKB] (IRQs 5 9 *10 11)
|
|
/var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: PCI Interrupt Link [LNKC] (IRQs 5 *9 10 11)
|
|
/var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: PCI Interrupt Link [LNKD] (IRQs 5 9 10 *11)
|
|
/var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: BERT: Boot Error Record Table support is disabled. Enable it by using bert_enable as kernel parameter.
|
|
/var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: ACPI: PCI Interrupt Link [LNKA] (IRQs 5 9 10 *11)
|
|
/var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: ACPI: PCI Interrupt Link [LNKB] (IRQs 5 9 *10 11)
|
|
/var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: ACPI: PCI Interrupt Link [LNKC] (IRQs 5 *9 10 11)
|
|
/var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: ACPI: PCI Interrupt Link [LNKD] (IRQs 5 9 10 *11)
|
|
/var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: BERT: Boot Error Record Table support is disabled. Enable it by using bert_enable as kernel parameter.
|
|
/var/log/messages-20201227:Dec 27 19:11:21 centos7vm kernel: [drm:vmw_host_log [vmwgfx]] *ERROR* Failed to send host log message.
|
|
/var/log/messages-20201227:Dec 27 19:11:21 centos7vm kernel: [drm:vmw_host_log [vmwgfx]] *ERROR* Failed to send host log message.
|
|
$
|
|
Puede observar en la salida anterior que el nombre del archivo se imprime primero antes de imprimir la línea correspondiente para indicar dónde grep encontró el patrón dado.
|
|
|
|
---Case Insensitive Search
|
|
grep ofrece buscar un patrón sin mirar el caso del patrón. Usar -i bandera para decirle a grep que ignore las mayúsculas y minúsculas.
|
|
$ grep -i [pattern] [file]
|
|
Salida:
|
|
$ grep -i it text_file.txt
|
|
This is a sample text file. It contains
|
|
functionality. You can always use grep with any
|
|
kind of data but it works best with text data.
|
|
It supports numbers like 1, 2, 3 etc. as well as
|
|
This is a sample text file. It's repeated two times.
|
|
$
|
|
|
|
---Whole Word Search
|
|
No siempre queremos una coincidencia parcial, sino que esperamos que grep coincida solo con una palabra completa. Puedes hacer eso con -w bandera.
|
|
$ grep -w [pattern] [file]
|
|
Salida:
|
|
$ grep -w is text_file.txt
|
|
This is a sample text file. It contains
|
|
This is a sample text file. It's repeated two times.
|
|
$
|
|
|
|
---Check Match Count
|
|
A veces, en lugar de la línea coincidente real, solo necesitamos el recuento de coincidencias exitosas que hizo grep. Podemos obtener este recuento usando -c .
|
|
$ grep -c [pattern] [file]
|
|
Salida:
|
|
$ grep -c is text_file.txt
|
|
2
|
|
$
|
|
|
|
---Search Sub-directories
|
|
A menudo es necesario buscar archivos no solo en el directorio de trabajo actual, sino también en subdirectorios. grep te permite hacer eso fácilmente con -r bandera.
|
|
$ grep -r [pattern] *
|
|
Salida:
|
|
$ grep -r Hello *
|
|
dir1/file1.txt:Hello One
|
|
dir1/file2.txt:Hello Two
|
|
dir1/file3.txt:Hello Three
|
|
$
|
|
Como puede observar, grep recorre cada subdirectorio dentro de un directorio actual y enumera los archivos y líneas donde se encuentra una coincidencia.
|
|
|
|
---Inverse Search
|
|
Si desea encontrar algo que no coincida con un patrón dado, grep permite hacerlo con -v bandera.
|
|
$ grep -v [pattern] [file]
|
|
Salida:
|
|
$ grep This text_file.txt
|
|
This is a sample text file. It contains
|
|
This is a sample text file. It's repeated two times.
|
|
$ grep -v This text_file.txt
|
|
several lines to be used as part of testing grep
|
|
functionality. You can always use grep with any
|
|
kind of data but it works best with text data.
|
|
It supports numbers like 1, 2, 3 etc. as well as
|
|
alphabets and special characters like - + * # etc.
|
|
$
|
|
Puede comparar la salida de grep comando en el mismo patrón y archivo con y sin -v bandera. Con -v, se imprimen las líneas que no coincidan con el patrón.
|
|
|
|
---Print Line Numbers
|
|
grep le permite imprimir números de línea junto con líneas impresas, lo que facilita saber dónde está la línea en el archivo. Usar -n opción como se muestra para obtener números de línea en la salida.
|
|
$ grep -n [pattern] [file]
|
|
Salida:
|
|
$ grep -n This text_file.txt
|
|
1:This is a sample text file. It contains
|
|
7:This is a sample text file. It's repeated two times.
|
|
$
|
|
|
|
---Limit grep Output
|
|
Para archivos grandes, como registros, etc., la salida grep puede ser larga y es posible que solo necesite un número fijo de líneas en la salida en lugar de hacer coincidir todo. Nosotros podemos usar -m[num] para limitar las líneas impresas por núm. He aquí cómo usarlo:
|
|
$ grep -m[num] [pattern] [file]
|
|
Observe cómo el uso de -m flag afecta la salida de grep para el mismo conjunto de condiciones en el siguiente ejemplo:
|
|
$ grep It text_file.txt
|
|
This is a sample text file. It contains
|
|
It supports numbers like 1, 2, 3 etc. as well as
|
|
This is a sample text file. It's repeated two times.
|
|
$ grep -m2 It text_file.txt
|
|
This is a sample text file. It contains
|
|
It supports numbers like 1, 2, 3 etc. as well as
|
|
$
|
|
|
|
---Display Additional Lines
|
|
A menudo, no solo necesitamos las líneas que tienen un patrón coincidente, sino algunas líneas arriba o abajo para un mejor contexto.
|
|
Es posible imprimir una línea por encima o por debajo (o ambos) de una línea que tiene un patrón usando grep usando -A, -B or -C banderas con num valor. Aquí num indica el número de líneas adicionales que se imprimirán justo encima o debajo de la línea correspondiente. Esto es aplicable a todas las coincidencias que grep encuentra en el archivo o lista de archivos especificados.
|
|
$ grep -A[num] [pattern] [file]
|
|
# imprime la busqueda y las [num] líneas indicadas posteriores
|
|
$ grep -B[num] [pattern] [file]
|
|
# imprime la busqueda y las [num] líneas indicadas anteriores
|
|
$ grep -C[num] [pattern] [file]
|
|
# imprime la busqueda y las [num] líneas indicadas posteriores y anteriores
|
|
|
|
---List File Names
|
|
Para imprimir solo el nombre de los archivos donde se encuentra un patrón en lugar de las líneas realmente coincidentes, use -l bandera.
|
|
$ grep -l [pattern] [file]
|
|
Aquí hay un ejemplo de ejecución:
|
|
$ grep -l su *.txt
|
|
file.txt
|
|
text_file.txt
|
|
$
|
|
Print Exact Lines
|
|
|
|
---A veces necesitamos imprimir líneas que coincidan exactamente con un patrón dado, no con una parte de él. grep permite -x bandera para hacer precisamente eso.
|
|
$ grep -x [pattern] [file]
|
|
En el siguiente ejemplo, file.txt contiene una línea con una sola palabra "support" y, como tal, grep hace coincidir con -x marca sin tener en cuenta las líneas que pueden contener las palabras "apoyo" junto con otro texto.
|
|
$ grep -x support *.txt
|
|
file.txt:support
|
|
$
|
|
|
|
---Match Starting String
|
|
Usando expresiones regulares, podemos encontrar una cadena al comienzo de una línea. He aquí cómo hacerlo.
|
|
$ grep [options] "^[string]" [file]
|
|
Ejemplo:
|
|
$ grep It text_file.txt
|
|
This is a sample text file. It contains
|
|
It supports numbers like 1, 2, 3 etc. as well as
|
|
This is a sample text file. It's repeated two times.
|
|
$ grep ^It text_file.txt
|
|
It supports numbers like 1, 2, 3 etc. as well as
|
|
$
|
|
Observe cómo usar ^ carácter cambia la salida. ^ indica el inicio de la cadena y grep coinciden ^It como cualquier línea que comience con la palabra It. Incluir entre comillas puede ayudar cuando el patrón contiene espacios, etc.
|
|
|
|
---Match Ending String
|
|
Otra expresión regular útil común es hacer coincidir el final del patrón de línea.
|
|
$ grep [options] "[string]$" [file]
|
|
Ejemplo:
|
|
$ grep "\." text_file.txt
|
|
This is a sample text file. It contains
|
|
functionality. You can always use grep with any
|
|
kind of data but it works best with text data.
|
|
It supports numbers like 1, 2, 3 etc. as well as
|
|
alphabets and special characters like - + * # etc.
|
|
This is a sample text file. It's repeated two times.
|
|
$ grep "\.$" text_file.txt
|
|
kind of data but it works best with text data.
|
|
alphabets and special characters like - + * # etc.
|
|
This is a sample text file. It's repeated two times.
|
|
$
|
|
Intentamos igualar un . carácter al final de la línea. Dado que el punto (.) Es un carácter de significado especial, debemos escapar de él con \ personaje. Una vez más, observe cómo varía la salida cuando simplemente hacemos . personaje y cuando usamos $ para instruir a grep para que coincida solo con las líneas que terminan con . (no los que pueden contenerlo en algún lugar intermedio).
|
|
|
|
---Use Pattern File
|
|
Puede haber situaciones en las que tenga una lista compleja de patrones que utilice con frecuencia. En lugar de escribirlo todo el tiempo, puede especificar una lista de patrones en un archivo y usar con -f bandera. El archivo debe contener un patrón por línea.
|
|
$ grep -f [pattern_file] [file_to_match]
|
|
En nuestro ejemplo, hemos creado nombres de archivos de patrones pattern.txt con los siguientes contenidos:
|
|
$ cat pattern.txt
|
|
This
|
|
It
|
|
$
|
|
Para usarlo, usa -f bandera.
|
|
$ grep -f pattern.txt text_file.txt
|
|
This is a sample text file. It contains
|
|
It supports numbers like 1, 2, 3 etc. as well as
|
|
This is a sample text file. It's repeated two times.
|
|
$
|
|
|
|
---Specify Multiple Patterns
|
|
grep permite especificar múltiples patrones usando -e bandera.
|
|
$ grep -e [pattern1] -e [pattern2] -e [pattern3]...[file]
|
|
Ejemplo:
|
|
$ grep -e is -e It -e to text_file.txt
|
|
This is a sample text file. It contains
|
|
several lines to be used as part of testing grep
|
|
It supports numbers like 1, 2, 3 etc. as well as
|
|
This is a sample text file. It's repeated two times.
|
|
$
|
|
|
|
Specify Extended RegEx
|
|
grep también admite expresiones regulares extendidas o ERE usando -E bandera. Esto es similar a egrep comando en Linux.
|
|
El uso de ERE tiene una ventaja cuando desea tratar a los metacaracteres como están y no desea sustituirlos por cadenas como grep. Esto le brinda más flexibilidad en términos de escapar de ellos, como debemos hacer en el caso de grep. Dicho esto, usando -E con grep es equivalente a egrep mando.
|
|
$ grep -E '[Extended RegEx]' [file]
|
|
Aquí hay un uso de ERE en el que queremos imprimir líneas que no están comentadas o en blanco. Esto es especialmente útil para encontrar algo en archivos de configuración grandes. He usado adicionalmente -v bandera para NO imprimir líneas que coincidan con el patrón '^(#|$)'.
|
|
$ sudo grep -vE '^(#|$)' /etc/ssh/sshd_config
|
|
HostKey /etc/ssh/ssh_host_rsa_key
|
|
HostKey /etc/ssh/ssh_host_ecdsa_key
|
|
HostKey /etc/ssh/ssh_host_ed25519_key
|
|
SyslogFacility AUTHPRIV
|
|
AuthorizedKeysFile .ssh/authorized_keys
|
|
PasswordAuthentication yes
|
|
ChallengeResponseAuthentication no
|
|
GSSAPIAuthentication yes
|
|
GSSAPICleanupCredentials no
|
|
UsePAM yes
|
|
X11Forwarding yes
|
|
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
|
|
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
|
|
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
|
|
AcceptEnv XMODIFIERS
|
|
Subsystem sftp /usr/libexec/openssh/sftp-server
|
|
$
|
|
|