En el post anterior («Búsqueda de patrones con grep«) mostramos cómo utilizar el comando grep para mostrar las ocurrencias de una palabra en un archivo o en la salida de un comando. Ahora veremos cómo utilizar una expresión regular básica como patrón.
Expresiones regulares
Wikipedia define a una expresión regular de la siguiente manera:
Una expresión regular, a menudo llamada también regex, es una secuencia de caracteres que forma un patrón de búsqueda.
Veamos algunas expresiones regulares iniciales:
- ^: representa el comienzo de una línea
- $: representa el fin de una línea
- [a-z]: todas las letras minúsculas
- [A-Z]: todas las letras mayúsculas
- [0-9]: todos los dígitos del sistema decimal
- . (un punto): representa un caracter cualquiera
- | (no confundir con el operador tubería): operador booleano OR
Combinándolas:
- ^[a-z]: líneas que comienzan con una letra minúscula
- ^#: líneas cuyo primer caracter sea el signo #
- ^$: líneas vacías
- [0-9][0-9]: líneas donde se encuentren al menos dos dígitos numéricos consecutivos
Veamos algunos ejemplos para ilustrar.
Usar grep para averiguar si nuestro CPU soporta extensiones de virtualización
Generalmente se recurre a grep para averiguar si nuestro CPU soporta virtualización. Para hacerlo, inspeccionaremos el archivo virtual /proc/cpuinfo, concentrándonos en la presencia de los indicadores vmx o svm en la lista de flags. La presencia del primero o del segundo indica que nuestro CPU (Intel o AMD, respectivamente) soporta virtualización.
El siguiente comando utiliza la opción -E para indicar que el patrón de búsqueda consiste en una expresión regular y chequea la presencia de uno u otro indicador al mismo tiempo al utilizar el operador booleano OR. Si nuestro CPU tiene más de un núcleo se mostrará una sección por cada uno (en mi caso, el resultado para un AMD Athlon(tm) II X2 250 el resultado se muestra en la Fig. 1):
[pastacode lang=»bash» manual=»grep%20-E%20′(vmx%7Csvm)’%20%2Fproc%2Fcpuinfo» message=»» highlight=»» provider=»manual»/]
Eliminar con grep líneas de comentarios o vacías
Con la ayuda de grep podemos eliminar todas las líneas que contengan comentarios (las cuales generalmente comienzan con el caracter #) o vacías de un archivo de texto. Esto es particularmente útil si queremos observar de manera rápida cuáles son las variables y los valores que se han definido explícitamente para las mismas en un servicio dado.
También utilizando grep con la opción -Ev (para eliminar líneas que cumplan con la expresión regular dada) y el operador OR podemos mostrar esta información fácilmente:
[pastacode lang=»bash» manual=»grep%20-Ev%20′(%5E%23%7C%5E%24)’%20%2Fetc%2Fhttpd%2Fconf%2Fhttpd.conf» message=»» highlight=»» provider=»manual»/]
El comando anterior mostrará solamente aquellas líneas de /etc/httpd/conf/httpd.conf que NO comiencen con # o que NO estén vacías.
En el próximo post explicaremos e ilustraremos mediante ejemplos el uso de las otras expresiones regulares mencionadas más arriba. ¡Hasta entonces!