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