sustituciones de cadena: todas las ocurrencias

13

Una pregunta simple, pero no puedo encontrar la respuesta. la documentación de zsh me abruma :-(

function z ()
{
  echo ${1:s/the/THE}
}

$ z thethethe
THEthethe

...

¿Cómo puedo reemplazar todo 'the' por 'THE', no solo la primera vez? Con zsh son las cosas más fáciles para las que parece ser más difícil encontrar ejemplos.

Ray Andrews
fuente

Respuestas:

23

Este es un modificador de expansión del historial , así que agregue el gmodificador inmediatamente antes s.

echo ${1:gs/the/THE}

Alternativamente, utilice la sintaxis expansión de parámetro , donde una barra doble significa una sustitución global. En este caso, la parte posterior s//es un patrón comodín, mientras que la sustitución de expansión de historial toma una cadena literal.

echo ${1//the/THE}
Gilles 'SO- deja de ser malvado'
fuente
6

Esto debería hacer el trabajo:

VARIABLE=thethethe
echo ${VARIABLE//the/THE}
THETHETHE
caos
fuente
3

Thereyago, tenía que ser simple:

echo ${1//the/THE}

... la doble barra lo hace, y no puedes perder el tiempo con ": s"

Por cierto, me gustaría agradecer a los sitios 'StackExchange' por existir. De todos los millones de lugares en los que uno podría hacer una pregunta, estos son, con mucho, los mejores: uno no solo casi siempre obtiene respuestas, sino que esas respuestas son invariablemente de la más alta calidad.

Ray Andrews
fuente
1

// funciona perfecto si solo estás tratando de reemplazar una palabra específica en mayúsculas mientras dejas el resto intacto. Si está intentando convertir todo a mayúsculas, puede usar ": u" en la variable

SOME_ENV_VALUE='thethethe'
echo $SOME_ENV_VALUE:u // outputs: THETHETHE

Puede verificar qué modificadores tiene disponibles en el manual de expansión y sustitución de zsh

man zshexpn
bradynpoulsen
fuente