Remover palavra específica na variável

23

Em um bashscript, como posso remover uma palavra de uma string, a palavra seria armazenada em uma variável.

FOO="CATS DOGS FISH MICE"
WORDTOREMOVE="MICE"
danm
fonte

Respostas:

30

Experimentar:

$ printf '%s\n' "${FOO//$WORDTOREMOVE/}"
CATS DOGS FISH

Isso também trabalhar em ksh93, mksh, zsh.


POSIXAMENTE:

FOO="CATS DOGS FISH MICE"
WORDTOREMOVE="MICE"

remove_word() (
  set -f
  IFS=' '

  s=$1
  w=$2

  set -- $1
  for arg do
    shift
    [ "$arg" = "$w" ] && continue
    set -- "$@" "$arg"
  done

  printf '%s\n' "$*"
)

remove_word "$FOO" "$WORDTOREMOVE"

Ele assume que suas palavras são delimitadas por espaço e tem efeito colateral que remove os espaços antes e depois "$WORDTOREMOVE".

cuonglm
fonte
17

Usando a substituição de substring do bash:

FOO = $ {FOO // $ WORDTOREMOVE /}

O // substitui todas as ocorrências da substring ($ WORDTOREMOVE) pelo conteúdo entre / e}. Neste caso, nada.

Para obter informações sobre essa e outras maneiras de trabalhar com seqüências de caracteres no bash, consulte a seção 10.1. Manipulando seqüências de caracteres do Guia avançado de script de bash .

John
fonte