Remove palavra específica na variável

11

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

FOO="CATS DOGS FISH MICE"
WORDTOREMOVE="MICE"
    
por danm 23.09.2016 / 04:28

2 respostas

17

Tente:

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

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

POSIXLY:

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 espaços antes e depois de "$WORDTOREMOVE" .

    
por 23.09.2016 / 04:53
6

Usando a substituição de substring bash:

FOO=${FOO//$WORDTOREMOVE/}

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

Para informações sobre esta e outras formas de trabalhar com strings no bash, veja a seção 10.1. Manipulando strings do Guia avançado de script de script .

    
por 23.09.2016 / 04:55