GNU/Linux >> Tutoriales Linux >  >> Linux

¿Dónde obtener la nueva cadena después de ejecutar `sub` en Awk?

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

Linux
  1. 4 formas de mantener un comando en ejecución después de cerrar la sesión de SSH

  2. Linux:¿cómo obtener la hora del reloj de pared de un proceso en ejecución?

  3. Cómo solucionar el problema "Firefox ya se está ejecutando" en Linux

  4. ¿Cómo puedo obtener la carpeta temporal de una máquina que ejecuta maven?

  5. después de instalar monit cuando hago monit status myproc obtengo un error al conectarme al demonio monit

Linux:¿dónde se almacena la cadena de entorno real?

¿Dónde está el comando de gemas en RHEL6?

¿Dónde está el tenedor() en la bomba tenedor :(){ :|:&};:?

¿Cómo puedo obtener la hora del reloj de pared de un proceso en ejecución?

No se puede obtener el acceso SSH para un nuevo usuario

¿Dónde se encuentra la base de datos updatedb?