Inicio > Procesamiento y búsqueda de texto > awk-gsub

awk-gsub: Sustitución global de cadenas

La función `gsub` utilizada dentro del comando `awk` se emplea para sustituir globalmente todas las cadenas que coinciden con una expresión regular específica por otra cadena. Es muy útil para modificar patrones que aparecen varias veces en el contenido de un archivo o en un flujo de datos.

Descripción general

`gsub` es la abreviatura de Global Substitution (Sustitución Global). Es una función dentro de los scripts de `awk` que cambia todas las partes que coinciden con una expresión regular específica por una cadena designada. A diferencia de la función `sub`, que solo cambia la primera coincidencia, `gsub` cambia todas las coincidencias.

Sintaxis de la función gsub

gsub(expresión_regular, cadena_de_reemplazo, [cadena_objetivo])

  • expresión_regular (regex): Es la expresión regular que define el patrón a buscar.
  • cadena_de_reemplazo (replacement): Es la cadena por la que se reemplazará el patrón encontrado.
  • cadena_objetivo (target_string): Es la cadena en la que se realizará la operación de sustitución. Si se omite, se aplicará a todo el registro actual ($0).

Valor de retorno

La función `gsub` devuelve un número entero que representa la cantidad de sustituciones realizadas. Este valor de retorno puede ser útil en sentencias condicionales, entre otros usos.

Ejemplos de uso

Aquí se presentan diversos ejemplos de sustitución de cadenas utilizando la función `gsub`.

Sustituir todas las ocurrencias de 'old' por 'new' en un archivo

echo 'This is an old file with old data.' > data.txt
awk '{gsub(/old/, "new"); print}' data.txt

Cambia todas las apariciones de la palabra 'old' por 'new' en el archivo data.txt. Muestra el contenido modificado.

Sustituir espacios por guiones

echo 'Hello World from Awk' | awk '{gsub(/ /, "-"); print}'

Cambia todos los espacios en la cadena de entrada por guiones (-).

Sustituir solo dentro de un campo específico

echo 'field1 field2 apple' | awk '{gsub(/a/, "X", $3); print}'

Sustituye 'a' por 'X' solo dentro del tercer campo ($3). (Ejemplo: 'apple banana cat' -> 'apple banana cXt')

Sustitución sin distinción entre mayúsculas y minúsculas

echo 'Apple is an apple.' | awk 'BEGIN {IGNORECASE=1} {gsub(/apple/, "orange"); print}'

Establece la variable `IGNORECASE` a 1 para sustituir 'apple' por 'orange' sin distinguir entre mayúsculas y minúsculas.

Eliminar solo los números

echo 'Product ID: 12345 ABC' | awk '{gsub(/[0-9]/, ""); print}'

Elimina todos los dígitos numéricos de la cadena.

Consejos y precauciones

Aquí se presentan consejos útiles y puntos a tener en cuenta al utilizar la función `gsub`.

Diferencia con la función sub

`gsub` sustituye todas las coincidencias, mientras que la función `sub` solo sustituye la primera coincidencia. Seleccione la función apropiada según sus necesidades.

  • `gsub(regex, replacement, target)`: Sustituye todas las coincidencias.
  • `sub(regex, replacement, target)`: Sustituye solo la primera coincidencia.

Caracteres especiales en expresiones regulares

Para usar caracteres especiales como `.` `*` `+` `?` `[` `]` `(` `)` `|` `^` `$` `\` como literales dentro de una expresión regular, debe escaparlos con `\`. Por ejemplo, para buscar un punto literal (.), use `\.`.

Precaución al omitir la cadena objetivo

Si omite `target_string`, la operación de sustitución se aplicará por defecto a todo el registro actual ($0). Si desea aplicarla solo a un campo específico, debe especificar el campo en el formato `gsub(regex, replacement, $N)`.

Barra invertida en la cadena de reemplazo

La barra invertida (`\`) puede tener un significado especial dentro de la cadena de reemplazo. Por ejemplo, `\&` representa toda la cadena coincidente. Para usar una barra invertida literal, debe escaparla dos veces, como `\\`.


Comandos de la misma categoría