substitutions de chaînes: toutes les occurrences

13

Une question simple, mais je ne trouve pas la réponse. la documentation zsh me submerge :-(

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

$ z thethethe
THEthethe

...

Comment puis-je remplacer tous les «the» par «THE», pas seulement la première occurrence? Avec zsh, ce sont les choses les plus simples qui semblent être les plus difficiles à trouver.

Ray Andrews
la source

Réponses:

23

Il s'agit d'un modificateur d'expansion de l'historique , alors ajoutez le gmodificateur juste avant s.

echo ${1:gs/the/THE}

Vous pouvez également utiliser la syntaxe d'extension de paramètre où une double barre oblique signifie une substitution globale. Dans ce cas, la partie après s//est un modèle générique, tandis que la substitution de développement d'historique prend une chaîne littérale.

echo ${1//the/THE}
Gilles 'SO- arrête d'être méchant'
la source
6

Cela devrait faire le travail:

VARIABLE=thethethe
echo ${VARIABLE//the/THE}
THETHETHE
le chaos
la source
3

Là, il fallait que ce soit simple:

echo ${1//the/THE}

... la double barre oblique le fait, et vous ne pouvez pas jouer avec ": s"

BTW, je tiens à remercier les sites «StackExchange» pour avoir existé. De tous les millions d'endroits où l'on peut poser une question, ce sont de loin les meilleurs - non seulement on obtient presque toujours des réponses, mais ces réponses sont toujours de la plus haute qualité.

Ray Andrews
la source
1

// fonctionne parfaitement si vous essayez seulement de remplacer un mot spécifique dans toutes les majuscules tout en laissant le reste intact. Si vous essayez de tout convertir en majuscules, vous pouvez utiliser ": u" sur la variable

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

Vous pouvez vérifier les modificateurs dont vous disposez dans le manuel d'extension et de substitution zsh

man zshexpn
bradynpoulsen
la source