substituições de string: todas as ocorrências

13

Uma pergunta simples, mas não consigo encontrar a resposta. a documentação do zsh me impressiona :-(

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

$ z thethethe
THEthethe

...

Como posso substituir todos os 'the' por 'THE', não apenas a primeira ocorrência? Com o zsh, são as coisas mais fáceis que parecem ser as mais difíceis de encontrar exemplos.

Ray Andrews
fonte

Respostas:

23

Este é um modificador de expansão do histórico , portanto, adicione o gmodificador imediatamente antes s.

echo ${1:gs/the/THE}

Como alternativa, use a sintaxe de expansão de parâmetro em que uma barra dupla significa uma substituição global. Nesse caso, a parte depois s//é um padrão curinga, enquanto a substituição da expansão do histórico usa uma sequência literal.

echo ${1//the/THE}
Gilles 'SO- parar de ser mau'
fonte
6

Isso deve fazer o trabalho:

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

Thereyago, tinha que ser simples:

echo ${1//the/THE}

... a barra dupla faz isso e você não pode brincar com ": s"

BTW, gostaria de agradecer aos sites 'StackExchange' por existirem. De todos os zilhões de lugares que se pode fazer uma pergunta, esses são de longe os melhores - não apenas quase sempre obtemos respostas, mas essas respostas são invariavelmente da mais alta qualidade.

Ray Andrews
fonte
1

// funciona perfeitamente se você estiver apenas tentando substituir uma palavra específica para todas as letras maiúsculas e deixar o restante intocado. Se você estiver tentando converter tudo em maiúscula, pode usar ": u" na variável

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

Você pode verificar quais modificadores estão disponíveis no manual de expansão e substituição do zsh

man zshexpn
bradynpoulsen
fonte