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"
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"
.
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 .