LPIC

Guía extraoficial de estudio

Archivos en la Categoría: 7: Búsqueda de archivos de texto usando expresiones regulares

Comando grep

Grep

Este comando nos permite el uso de expresiones regulares para la búsqueda de archivos. Veamos algunas de las opciones más importantes:

Flag Acción
-c o –count Contar lineas coincidentes
-i o –ignore-case Ignorar entre mayúsculas y minúsculas
-r –recursive Buscar recursivamente
-f o –file=fichero Especifica el fichero de entrada
-E o — extended-regexp Utilizar una expresión regular extendida

La sintaxis del comando es:

grep [opciones] regexp [ficheros]

Donde “regexp” es el conjunto de expresiones regulares

Un ejemplo sencillo podría ser el siguiente:

grep -r eth0 /etc/*

Dicha orden buscará en el directorio /etc/ y en TODAS sus subcarpetas todos los ficheros que contengan la cadena “eth0”.

Dado que los usuarios normales no pueden acceder a determinados ficheros de /etc/, es posible que al probar la orden os devuelva algún error. Para solucionar esto, o bien probamos la orden como root, o redirigimos los errores a “/dev/null”

A continuación algunos ejemplos más complicados:

grep -r eth[01] /etc/*

Mostrará los ficheros que contengan la cadena eth0 y etho1.

grep -E “(www.\ejemplo\.es|www.\ejemplo2\.com” /etc/*

Se nos muestran todos los ficheros del directorio /etc/ y sus subdirectorios que contengan las cadenas http://www.ejemplo.es o http://www.ejemplo2.com

Se deben entrecomillar ciertas expresiones regulares para que la consola no las intente analizar como un comando propio.

Ahora usaremos el grep junto con otro comando:
<div style=”background-color: #e0e0e0; padding: 1.2em 1.2em 1.2em 61px;”ps ax | grep xterm

Muestra todos los procesos en ejecución llamados “xterm”

Las expresiones regulares

El shell nos proporciona una característica que nos ahorra tiempo a la hora de teclear nombre de ficheros con los que operan comandos. La característica se llama generación de ficheros o expansión de nombres y permite utilizar caracteres especiales para especificar grupos de nombres de ficheros.

Podemos encontrar nombre de ficheros que cumplen un determinado patrón, como por ejemplo los que acaben en “.txt” o los que empiecen por “fichero” o los que tienen 3 caracteres. Veamos los tipos de esprexion regular:

Caracteres especiales utilizados:

Carácter Resultado Ejemplo
 . Representa cualquier carácter único, excepto el salto de linea El comando “ls o.o mostrará los ficheros que empiecen por o, contenga cualquier otra letra, y termine por o (oso, oco, olo..).
^ Representa el comienzo de una linea cat /etc/passwd | grep ^u nos devolverá las lineas del fichero que empiecen por “u”.
$ Representa el final de una linea cat /etc/passwd | grep “bash$” nos devolverá las lineas del fichero que acaben en “bash”.
| Separa dos posibles coincidencias hola | adios coincide con hola y adiós
() Rodean subexpresiones. Es utilizado para asegurarse de las expresiones que rodean sean tratadas como un grupo. grep “\(us\)\+” passwd nos devolverá todas las coincidencias que encuentre con la cadena “us“.
\ Si se antepone a un carácter especial, este será tratado como un carácter normal.  Para que la cadena http://www.google.com  sea tratada como
tal, deberemos indica www\.google\.com.
Sino, el punto podria ser igual a cualquier carácter, y nos podría devolver, por ejemplo, wwwagoogleacom.


Expresiones entre corchetes:

 Las expresiones que contengan caracteres rodeados entre corchetes, nos devolverán las cadenas que coincidan con cualquiera de las letras que estén entre los mismos. Por ejemplo, el comando ls C[AEIOU]L nos va a mostar todos los archivos que tengamos en el directorio que se llamen cal, cel, cil, col y cul, y el comando ls [a-zA-z], todos los ficheros que empiecen por minúscula o mayúscula.

Expresión regular Resultado
[] Coincidencia con cualquiera de los caracteres cerrados
[! ] Coincidencia con cualquiera de los caraceres no cerrados
[ – ] Coincidencia con cualquiera de los caracteres del rango

Operadores de repetición:

Se trata de símbolos especiales que se utilizan para denotar cuantas veces debe aparecer un elemento coincidente.

Símbolo Resultado
? Especifica cero o una coincidencia
* Especifica cero o más ocurrencias
+ Coincide con una o mas apariciones

Ejemplos:

La expresión A?B, nos podrá coincidir con AEB, ACB, AB, …..

La expresión version10.*, nos podra coincidir con version101,version102, version1000 ….etc