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 `\\`.