Del lenguaje de programación Awk
La función sub ( r, s , t ) primero encuentra la subcadena
más larga situada más a la izquierda que coincide con la expresión regular r en el destino
cadena t; luego reemplaza la subcadena por la sustitución
cadena s .
La función sub(r,s) es un sinónimo de sub(r,s,$0) .
En sub ( /ana/, "anda" , "banana" ) , por ejemplo, banana se
reemplaza por bandada .
Después de ejecutar sub ( r, s , t ) , ¿cómo puedo obtener la nueva cadena?
Por ejemplo, en sub ( /ana/, "anda" , "banana" ) , como puedo obtener la nueva cadena bandada ?
La función sub devuelve el número de sustituciones realizadas.
Es el regreso de sub ¿0 o 1? ¿Es correcto que no puede ser más de uno, porque sub solo encontrar la primera coincidencia y reemplazarla?
Gracias.
Respuesta aceptada:
Del manual GNU awk 9.1.3 Funciones de manipulación de cadenas:
… el tercer argumento de sub() debe ser una variable, un campo o un elemento de matriz
. Algunas versiones de awk permiten que el tercer argumento sea una expresión
que no sea un valor l. En tal caso, sub() aún busca
el patrón y devuelve cero o uno, pero el resultado de la
sustitución (si lo hay) se descarta porque no hay lugar para colocarlo
. Tales versiones de awk aceptan expresiones como las siguientes:
sub(/USA/, "United States", "the USA and Canada")
Por compatibilidad histórica
, gawk acepta ese código erróneo. Sin embargo, el uso de cualquier
otro objeto no modificable como tercer parámetro provoca un error fatal
y su programa no se ejecutará.
Entonces, la respuesta es usar una variable:
awk 'BEGIN{t = "banana"; sub(/ana/,"anda",t); print t}'
bandana