O caminho mais rápido para remover uma string em uma variável

0

Digamos que eu tenha uma variável foo , ou seja:

foo='echo ab cd ef gh'

Se você echo foo , você recebe:

$ echo $foo
ab cd ef gh

Agora, desejo remover ef de $foo . Qual é a maneira mais rápida de fazer isso?

    
por rnels12 20.10.2015 / 03:35

3 respostas

5

Suponha que sua variável contenha pelo menos uma ocorrência de ef , POSIXly:

$ printf '%s\n' "${foo%ef*}${foo##*ef}" 
ab cd  gh

Em bash , ksh variants (excluir posh ), zsh e yash , você pode usar:

$ printf '%s\n' "${foo/ef}"

para remover a primeira ocorrência de ef ou "${foo//ef}" para remover todas as ocorrências.

    
por 20.10.2015 / 04:01
5

Você pode usar a substituição de padrões do shell para remover padrões:

$ foo="ab cd ef gh"
$ echo "${foo//ef}"
ab cd  gh

Notas

  1. Muitos consideram o uso de backticks como arcaico. A forma moderna usual de substituição de comando é $(...) .

  2. Usar backticks e echo para criar foo é supérfluo. Você pode simplesmente atribuir a string à variável mostrada acima.

  3. Apenas para que você esteja ciente do que está acontecendo, quando você usa o echo sem colocar o argumento entre aspas, o shell executa divisão de palavras , dividindo a string em três partes, foi alimentado para echo como três argumentos separados. echo concatena seu argumento por um espaço.

por 20.10.2015 / 03:50
0

Aqui estão duas maneiras de fazer ...

uc@SVE1411EGXB:~/shop_app/depot2$ foo='echo ab cd ef gh'
uc@SVE1411EGXB:~/shop_app/depot2$ echo ${foo/ef} 
ab cd gh

Ou com o editor de fluxo AKA sed .. Procure por "ef" e substitua por nada.

uc@SVE1411EGXB:~/shop_app/depot2$ echo $foo | sed 's/ef//g'
    ab cd  gh
    
por 20.10.2015 / 04:10

Tags