web-dev-qa-db-fra.com

Supprimer un mot spécifique dans une variable

Dans un script bash, comment puis-je supprimer un mot d'une chaîne, le mot serait stocké dans une variable.

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

Essayer:

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

Cela fonctionne également dans ksh93, mksh, zsh.


POSIX:

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"

Il suppose que vos mots sont séparés par des espaces et ont un effet secondaire qui supprime les espaces avant et après "$WORDTOREMOVE".

36
cuonglm

Utilisation du remplacement de la sous-chaîne bash:

FOO = $ {FOO // $ WORDTOREMOVE /}

// remplace toutes les occurrences de la sous-chaîne ($ WORDTOREMOVE) par le contenu entre/et}. Dans ce cas, rien.

Pour plus d'informations à ce sujet et sur d'autres façons de travailler avec des chaînes dans bash, reportez-vous à la section 10.1. Manipulation des chaînes du Advanced Bash-Scripting Guide .

26
John