Lathack

Uso del comando grep en Linux

Uso del comando grep en Linux

Introducción

El uso del comando grep en Linux es uno de los mas utilizados en sistemas GNU/Linux ya que se utiliza para buscar patrones en archivos o por STDIN en cualquier entorno. Especialmente por buscar textos a través de expresiones regulares. Aconsejamos haber leído las herramientas anteriormente vistas para un mejor uso.

Sintaxis:

grep (opciones) [patrón] archivo

Opciones:

-i No diferencia mayúsculas de minúsculas.

-c Cuenta la cantidad de coincidencias.

-v Muestra el resultado inverso.

-E Utiliza expresiones regulares extendidas.

-r Búsqueda recursiva.

-n Muestra el número de línea.

A [numero] Muestra “número” de líneas después del patrón encontrado.

-B [numero] Muestra “número” de líneas antes del patrón encontrado.

Contar la cantidad de coincidencias de la palabra error en el siguiente archivo:

# grep -c error /var/log/messages

Buscar la palabra error y remarcarla con color:

# grep –color error /var/log/messages

Uso del comando grep en Linux

Contar la cantidad de coincidencias de la palabra error en todos los archivos que comienzan con a:

# grep -c error /var/log/a*

/var/log/agns:0

/var/log/anaconda.log:1

/var/log/anaconda.program.log:0

/var/log/anaconda.storage.log:0

/var/log/anaconda.syslog:6

Contar la cantidad de coincidencias de la palabra error sin distinguir mayúsculas de minúsculas:

# grep -c error /var/log/messages

5

Opciones con pipes

Muestra sólo lo que contenga la palabra root:

# cat /etc/passwd | grep root

root:x:0:0:root:/root:/bin/bash

Muestra lo que no contenga la palabra bash:

# cat /etc/passwd|grep -v bash

daemon:x:1:1:daemon:/usr/sbin:/bin/sh

bin:x:2:2:bin:/bin:/bin/sh

sync:x:4:65534:sync:/bin:/bin/sync

Busca la palabra link y muestra el número de línea:

# grep -n link /var/log/messages

Uso del comando grep en Linux

Busca la palabra error en el directorio /var/log y todos sus subdirectorios:

# grep -rn error /var/log/*

Busca la palabra DHCPACK y muestra una línea antes y una después del resultado:

# grep -A 1 -B 1 DHCPACK /var/log/messages

Sep 30 17:50:08 oc6127656113 dhclient[2991]: DHCPREQUEST on em1 to 9.0.132.30 port 67

Sep 30 23:58:08 oc6127656113 dhclient[2991]: DHCPACK from 9.0.132.30

Ejemplos:

La contrabarra “ \ ” es un caracter de “escape”, esto significa que el caracter que este a continuación del mismo, tendrá un significado en especial.

Expresiones Regulares

Como mencionamos anteriormente, el uso del comando grep en linux se hace más «poderoso» a través de las expresiones regulares. En ellas utilizamos cadenas de texto o patrones, los cuales pueden ser de dos tipos literales (texto plano) o metacaracteres (símbolos con un significado especial).

Veamos algunos símbolos:

^ Indica que es al inicio de la línea.

$ Al final de la línea.

\< \> Exactamente lo que está entre \< \> (Ej: \<palabra\>)

Buscar el patrón bin dentro del archivo /etc/passwd:

# grep ‘bin’ /etc/passwd

root:x:0:0:root:/root:/ bin /bash

daemon:x:1:1:daemon:/usr/s bin :/ bin /sh

bin :x:2:2: bin :/ bin :/ bin /sh

(…)

Buscar la línea que comienza con bin:

# grep ‘^bin’ /etc/passwd

bin:x:2:2:bin:/bin:/bin/sh

Buscar exactamente bin:

# grep ‘\<bin\>’ /etc/passwd

root:x:0:0:root:/root:/ bin /bash

daemon:x:1:1:daemon:/usr/sbin:/ bin /sh

bin :x:2:2:bin:/ bin :/ bin /sh

Buscar lo que finaliza con sh:

# grep ‘sh$’ /etc/passwd

root:x:0:0:root:/root:/bin/ba sh

daemon:x:1:1:daemon:/usr/sbin:/bin/ sh

bin:x:2:2:bin:/bin:/bin/ sh

Mostrar todas las líneas NO vacías:

# grep -v ‘^$’ archivo.txt

Character sets:

[abc] Grupo de caracteres. Esto identifica una de esas tres letras.

[a-z] Identifica cualquier letra de la a a la z en minúscula.

[0-9] Identifica cualquier número.

[^abc] Identifica cualquier letra que no sea a, b, c en minúscula.

[^a-z] Identifica cualquier caracter que no sea de la a a la z minúscula.

El signo “ . ” es un comodín para cualquier caracter (excepto línea nueva).

También podemos usar:

\d  Hace referencia a [0-9]

\D  Hace referencia a [^0-9]

\t  tabulación

\T  NO tabulación

\s  espacio en blanco

\S  NO espacio en blanco

\n  salto en línea

\r  retorno de carro

\b  separador de palabra

POSIX character clases

[:alnum:] Alphanumeric [a-zA-Z0-9]

[:alpha:] Alphabetic [a-zA-Z]

[:blank:] Spaces or Tabs

[:cntrl:] Control characters

[:digit:] Numeric digits [0-9]

[:graph:] Any visible characters

[:lower:] Lowercase [a-z]

[:print:] Noncontrol characters

[:punct:] Punctuation characters

[:space:] Whitespace

[:upper:] Uppercase [A-Z]

[:xdigit:] Hex digits [0-9a-fA-F]

Ejemplos:

Los caracteres pueden ser situados en grupos y rangos para realizar expresiones regulares más efecientes.

# cat ejemplo.txt

Villa Dalmine

Restaurador de Leyes de Argentina

JMR

Argelia

argelia

124Argelia

12JMR

12345JMR

Buscar Argelia o argentina:

# grep ‘[Aa]rgelia’ ejemplo.txt

argelia

124Argelia

Buscar exactamente Argentina o argentina:

# grep ‘\<[Aa]rgentina\>’ ejemplo.txt

Restaurador de Leyes de Argentina

Buscar tres números consecutivos del 0 al 9:

# grep ‘[0-9][0-9][0-9]‘ ejemplo.txt

124Argelia

12345JMR

Buscar todo lo que no comience con un número:

# grep ‘^[^0-9]‘ test

Villa Dalmine

Restaurador de Leyes de Argentina

JMR

Argelia

Argelia

Modificadores

Existen dos tipos de expresiones regulares: básicas y extendidas. Las expresiones regualares extendidas consideran ciertos caracteres como especiales. En las expresiones regulares básicas para que dicho carácter tenga un sentido especial es necesario anteponerle una contra barra, tal como se muestra a continuación:

Extendidas

Básicas

Descripción

*

*

Identifica cero o más veces un único carácter.

?

/?

Identifica cero o una vez la expresión regular que antecede.

+

/+

Identifica una o más veces la expresión regular que antecede.

{n,m}

/{n,m}

Identifica un rango de ocurrencias (un caracter o una expresión regular) que antecede. Debe identificar al menos n hasta m ocurrencias.

|

/|

Identifica una u otra. Función lógica OR.

(regex)

\(regex\)

Agrupa. Identifica grupo de expresiones regulares.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

1 × tres =

Lathack
Scroll al inicio