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

7

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

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

$ z thethethe
THEthethe

...

Como posso fazer com que todos 'the' sejam substituídos por 'THE', não apenas na primeira ocorrência? Com o zsh, são as coisas mais fáceis que parecem ser as mais difíceis de encontrar exemplos.

    
por Ray Andrews 16.02.2014 / 19:48

4 respostas

14

Este é um modificador de expansão do histórico , portanto adicione o modificador g imediatamente antes do 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 após s// é um padrão curinga, enquanto a substituição de expansão de histórico recebe uma sequência literal.

echo ${1//the/THE}
    
por 17.02.2014 / 00:19
4

Isso deve fazer o trabalho:

VARIABLE=thethethe
echo ${VARIABLE//the/THE}
THETHETHE
    
por 16.02.2014 / 23:27
2

Aliás, 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 do 'StackExchange' por existirem. De todos os zilhões de lugares que se pode fazer uma pergunta, estes são de longe os melhores - um não só quase sempre obtém respostas, mas essas respostas são invariavelmente da mais alta qualidade.

    
por 17.02.2014 / 00:43
0

// funciona perfeito se você está apenas tentando substituir uma palavra específica para maiúscula, deixando o resto intocado. Se você está tentando converter tudo para maiúsculas, você pode usar ": u" na variável

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

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

man zshexpn
    
por 24.07.2017 / 21:22

Tags