GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo usar expresiones Awk y regulares para filtrar texto o cadenas en archivos

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:

  1. Personajes ordinarios como espacio, guión bajo (_), A-Z, a-z, 0-9.
  2. Metacaracteres que se expanden a caracteres ordinarios, incluyen:
    1. (.) coincide con cualquier carácter individual excepto una nueva línea.
    2. (*) coincide con cero o más existencias del carácter inmediato que lo precede.
    3. [ 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.
    4. ^ coincide con el comienzo de una línea en un archivo.
    5. $ coincide con el final de la línea en un archivo.
    6. \ 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:

  1. [0-9] significa un solo número
  2. [a-z] significa coincidir con una sola letra minúscula
  3. [A-Z] significa coincidir con una sola letra mayúscula
  4. [a-zA-Z] significa coincidir con una sola letra
  5. [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.


Linux
  1. Cómo usar el comando Grep para buscar texto en archivos

  2. Cómo extraer archivos .gz y .tar.gz en Linux

  3. ¿En qué se diferencian las expresiones regulares de los comodines utilizados para filtrar archivos?

  4. Cómo usar Netcat para transferir archivos en Linux

  5. Cómo usar Logrotate para administrar archivos de registro

Cómo encontrar archivos que contengan una cadena de texto específica en Linux

Cómo eliminar líneas vacías en archivos usando Grep, Sed y Awk

Cómo buscar y reemplazar texto, palabra o cadena en un archivo

Cómo crear y usar un archivo de intercambio en Linux

Cómo ocultar carpetas y archivos en Linux usando un archivo de texto

Cómo usar Sed para buscar y reemplazar una cadena en un archivo