Cuando ejecutamos ciertos comandos en Unix/Linux para leer o editar texto de una cadena o archivo, la mayoría de las veces tratamos de filtrar la salida a una sección determinada de interés. Aquí es donde el uso de expresiones regulares resulta útil.
Lea también: 10 operadores útiles de encadenamiento de Linux con ejemplos prácticos
¿Qué son las expresiones regulares?
Una expresión regular se puede definir como cadenas que representan varias secuencias de caracteres. Una de las cosas más importantes de las expresiones regulares es que le permiten filtrar la salida de un comando o archivo, editar una sección de un archivo de texto o configuración, etc.
Características de la expresión regular
Las expresiones regulares están formadas por:
- Personajes ordinarios como espacio, guión bajo (_), A-Z, a-z, 0-9.
- Metacaracteres que se expanden a caracteres ordinarios, incluyen:
(.)
coincide con cualquier carácter individual excepto una nueva línea.(*)
coincide con cero o más existencias del carácter inmediato que lo precede.[ character(s) ]
coincide con cualquiera de los caracteres especificados en carácter(es), también se puede usar un guión(-)
para referirse a un rango de caracteres como[a-f]
,[1-5]
, y así sucesivamente.^
coincide con el comienzo de una línea en un archivo.$
coincide con el final de la línea en un archivo.\
es un carácter de escape.
Para filtrar texto, se debe usar una herramienta de filtrado de texto como awk . Puedes pensar en awk como un lenguaje de programación propio. Pero para el alcance de esta guía sobre el uso de awk , lo cubriremos como una herramienta de filtrado de línea de comando simple.
La sintaxis general de awk es:
# awk 'script' filename
Donde 'script'
es un conjunto de comandos que son entendidos por awk y se ejecutan en el archivo, nombre de archivo.
Funciona leyendo una línea dada en el archivo, hace una copia de la línea y luego ejecuta el script en la línea. Esto se repite en todas las líneas del archivo.
El 'script'
tiene la forma '/pattern/ action'
donde patrón es una expresión regular y la acción es lo que hará awk cuando encuentre el patrón dado en una línea.
Cómo usar la herramienta de filtrado Awk en Linux
En los siguientes ejemplos, nos centraremos en los metacaracteres que discutimos anteriormente en las características de awk.
Un ejemplo simple del uso de awk:
El siguiente ejemplo imprime todas las líneas en el archivo /etc/hosts ya que no se da ningún patrón.
# awk '//{print}'/etc/hosts
Usar Awk con Patrón:
En el ejemplo de abajo, un patrón localhost
se ha proporcionado, por lo que awk coincidirá con la línea que tiene localhost en el /etc/hosts
archivo.
# awk '/localhost/{print}' /etc/hosts
Uso de Awk con (.) comodín en un patrón
El (.)
coincidirá con cadenas que contengan loc , servidor local , red local en el siguiente ejemplo.
Es decir * l some_single_character c * .
# awk '/l.c/{print}' /etc/hosts
Uso de Awk con carácter (*) en un patrón
Coincidirá con cadenas que contengan localhost , red local , líneas , capaz , como en el siguiente ejemplo:
# awk '/l*c/{print}' /etc/localhost
También te darás cuenta de que (*)
intenta obtener la coincidencia más larga posible que pueda detectar.
Veamos un caso que demuestra esto, tomemos la expresión regular t*t
lo que significa hacer coincidir cadenas que comienzan con la letra t
y terminar con t
en la siguiente línea:
this is tecmint, where you get the best good tutorials, how to's, guides, tecmint.
Obtendrá las siguientes posibilidades cuando utilice el patrón /t*t/
:
this is t this is tecmint this is tecmint, where you get t this is tecmint, where you get the best good t this is tecmint, where you get the best good tutorials, how t this is tecmint, where you get the best good tutorials, how tos, guides, t this is tecmint, where you get the best good tutorials, how tos, guides, tecmint
Y (*)
en /t*t/
el carácter comodín permite a awk elegir la última opción:
this is tecmint, where you get the best good tutorials, how to's, guides, tecmint
Usando Awk con set [caracter(es)]
Tomemos por ejemplo el conjunto [al1]
, aquí awk coincidirá con todas las cadenas que contengan el carácter a
o l
o 1
en una línea en el archivo /etc/hosts .
# awk '/[al1]/{print}' /etc/hosts
El siguiente ejemplo coincide con cadenas que comienzan con K
o k
seguido de T
:
# awk '/[Kk]T/{print}' /etc/hosts
Especificación de caracteres en un rango
Comprender caracteres con awk:
[0-9]
significa un solo número[a-z]
significa coincidir con una sola letra minúscula[A-Z]
significa coincidir con una sola letra mayúscula[a-zA-Z]
significa coincidir con una sola letra[a-zA-Z 0-9]
significa coincidir con una sola letra o número
Veamos un ejemplo a continuación:
# awk '/[0-9]/{print}' /etc/hosts
Toda la línea del archivo /etc/hosts contener al menos un solo número [0-9]
en el ejemplo anterior.
Usar Awk con (^) metacarácter
Coincide con todas las líneas que comienzan con el patrón proporcionado como en el siguiente ejemplo:
# awk '/^fe/{print}' /etc/hosts # awk '/^ff/{print}' /etc/hosts
Usar Awk con ($) metacarácter
Coincide con todas las líneas que terminan con el patrón provisto:
# awk '/ab$/{print}' /etc/hosts # awk '/ost$/{print}' /etc/hosts # awk '/rs$/{print}' /etc/hosts
Usar Awk con (\) carácter de escape
Te permite tomar el carácter que lo sigue como un literal, es decir, considerarlo tal como es.
En el siguiente ejemplo, el primer comando imprime todas las líneas del archivo, el segundo comando no imprime nada porque quiero hacer coincidir una línea que tiene $25.00 , pero no se utiliza ningún carácter de escape.
El tercer comando es correcto ya que se usó un carácter de escape para leer $ como es.
# awk '//{print}' deals.txt # awk '/$25.00/{print}' deals.txt # awk '/\$25.00/{print}' deals.txt
Resumen
Eso no es todo con el awk herramienta de filtrado de línea de comandos, los ejemplos anteriores son las operaciones básicas de awk. En las siguientes partes, avanzaremos sobre cómo usar funciones complejas de awk. Gracias por leer y por cualquier adición o aclaración, publique un comentario en la sección de comentarios.