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

Cómo usar Awk y expresiones 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 determinada sección de interés. Aquí es donde el uso de expresiones regulares resulta útil.

Lea también: 10 operadores de encadenamiento de Linux útiles 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 texto o archivo de configuración, etc.

Características de la expresión regular

Expresiones regulares están formados por:

  1. Caracteres ordinarios. como espacio, guión bajo (_), AZ, az, 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. [carácter (s)] coincide con cualquiera de los caracteres especificados en los caracteres, también se puede usar un guión (-) para referirse a un rango de caracteres como como [af], [1-5], etc.
    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 el texto, uno tiene que usar un filtro de texto herramienta ering 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 comandos simple.

La sintaxis general de awk es:

# awk ‘script’ nombre de archivo

Donde ‘script’ es un conjunto de comandos que awk. y se ejecutan en el archivo, nombre de archivo.

Funciona leyendo una línea determinada 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 el formato ‘/patrón/acción’ donde patrón. es una expresión regular y acción. es lo que hará awk cuando encuentre el patrón dado en una línea.

Cómo utilizar la herramienta de filtrado Awk en Linux

En los siguientes ejemplos, nos centraremos en en los metacaracteres que discutimos anteriormente bajo las características de awk.

Un ejemplo simple de usar awk:

El siguiente ejemplo imprime todas las líneas en el archivo /etc/hosts. desde no se proporciona ningún patrón.

# awk ‘// print’/etc/hosts  Awk Imprime todas las líneas en un archivo  Awk imprime todas las líneas en un archivo Awk imprime todas las líneas en un archivo Use Awk con patrón:

En el ejemplo siguiente, se ha dado un patrón localhost, por lo que awk coincidirá con la línea que tiene localhost. en el archivo/etc/hosts.

# awk ‘/localhost/ print’/etc/hosts Awk Imprimir una línea coincidente dada en un archivo  Awk Impresión dada coincidencia Línea en un archivo Awk Imprime una línea coincidente dada en un archivo usando Awk con (.) Comodín en una P attern

El (.) coincidirá con cadenas que contengan loc. localhost. localnet. en el siguiente ejemplo.

Es decir * l some_single_character c *.

# awk ‘/lc/ print’/etc/hosts  Utilice Awk para imprimir cadenas coincidentes en un archivo Use Awk para imprimir cadenas coincidentes en un archivo Use Awk para imprimir cadenas coincidentes en un archivo usando Awk con caracteres (*) en un patrón

Coincidirá cadenas que contienen localhost. localnet. líneas. capaces. como en el ejemplo siguiente:

# awk ‘/l * c/ print’/etc/localhost Usar Awk para hacer coincidir cadenas en el archivo  Use Awk para hacer coincidir las cadenas en el archivo Use Awk para hacer coincidir las cadenas en el archivo

También se dará cuenta de que (*) intenta obtener la coincidencia más larga posible que pueda detectar .

Veamos un caso que demuestre esto, tome la expresión regular t * t que significa coincidir cadenas que comienzan con la letra t y terminan con t en la línea siguiente:

esto es tecmint, donde obtienes los mejores buenos tutoriales, procedimientos, guías, tecmint.

Obtendrá las siguientes posibilidades cuando use el patrón/t * t/:

esto es t esto es tecmint esto es tecmint, donde se obtiene t esto es tecmint, donde se obtiene lo mejor bueno t esto es tecmint, dónde obtienes los mejores buenos tutoriales, cómo es tecmint, dónde obtienes los mejores buenos tutoriales, cómo, guías, esto es tecmint, dónde obtienes los mejores buenos tutoriales, cómo, guías, tecmint

Y (*) en/t * t/carácter comodín permite a awk elegir la última opción:

esto es tecmint, donde obtienes los mejores buenos tutoriales, procedimientos, guías, tecmint Usando Awk con set [carácter (s)]

Tomemos por ejemplo el conjunto [al1], aquí awk coincidirá con todas las cadenas que contengan el carácter ao 1 en una línea en el archivo /etc/hosts.

# awk ‘/[al1]/ print’/etc/hosts  Use-Awk para imprimir un carácter coincidente en el archivo  Use-Awk para imprimir caracteres coincidentes en el archivo Use-Awk para imprimir caracteres coincidentes en el archivo

El siguiente ejemplo coincide con cadenas que comienzan con K o k seguidas de T:

# awk ‘/[Kk] T/ print’/etc/hosts  Use Awk para Imprimir cadena coincidente en archivo  Use Awk para imprimir cadenas coincidentes en el archivo Utilice Awk para imprimir cadenas coincidentes en un archivo que especifique caracteres en un rango

Comprenda los caracteres con awk:

  1. [0-9] significa un solo número
  2. [az] significa que coincide con una sola letra minúscula
  3. [AZ] significa que coincide con una sola letra mayúscula
  4. [a-zA-Z] significa que coincide 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  Utilice Awk para imprimir números coincidentes en el archivo  Utilice Awk para imprimir números coincidentes en el archivo Utilice Awk para imprimir números coincidentes en el archivo

Toda la línea del archivo /etc/hosts. contiene al menos un solo número [0-9] en el ejemplo anterior.

Use Awk con (^) Meta Carácter

Coincide todas las líneas que comienzan con el patrón proporcionado como en el siguiente ejemplo:

# awk ‘/^ fe/ print’/etc/hosts # aw k ‘/^ ff/ print’/etc/hosts  Utilice Awk para imprimir todas las líneas coincidentes con el patrón  Use Awk para imprimir todas las líneas coincidentes con el patrón Use Awk para imprimir todas las líneas coincidentes con el patrón Use Awk con ( $) Metacarácter

Coincide con todas las líneas que terminan con el patrón proporcionado:

# awk ‘/ab $/ print’/etc/hosts # awk ‘/ost $/ print’/etc/hosts # awk ‘/rs $/ pri nt ‘/etc/hosts Usar Awk para imprimir una cadena de patrón dada  Usar Awk para imprimir una cadena de patrón dada Use Awk para imprimir una cadena de patrón dada Use Awk con (\) carácter de escape

Le permite tomar el carácter que lo sigue como un literal, es decir, considérelo 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 usa ningún carácter de escape.

El tercer comando es correcto ya que un escape El carácter se ha utilizado para leer $. tal cual.

# awk ‘// print’ deals.txt # awk ‘/$ 25.00/ print’ deals.txt # awk ‘/\ $ 25.00/ print ‘Deals.txt  Use Awk con carácter de escape  Usar Awk con carácter de escape Usar Awk con carácter de escape

Resumen

Eso no es todo con la herramienta de filtrado de línea de comandos awk. los ejemplos anteriores son las operaciones básicas de awk. En las próximas partes avanzaremos sobre cómo utilizar funciones complejas de awk. Gracias por leer y por cualquier adición o aclaración, publique un comentario en la sección de comentarios.