Dans un script bash
, comment puis-je supprimer un mot d'une string, 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 aussi dans 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"
Il suppose que vos mots sont délimités par des espaces et a des effets secondaires qui suppriment les espaces avant et après "$WORDTOREMOVE"
.
Utilisation du rlocation de la sous-string bash:
FOO = $ {FOO // $ WORDTOREMOVE /}
Le // remplace toutes les occurrences de la sous-string ($ WORDTOREMOVE) par le contenu entre / et}. Dans ce cas rien.
Pour plus d'informations sur cette méthode et d'autres façons de travailler avec les strings dans bash, reportez-vous à la section 10.1. Manipulation des strings du guide avancé Bash-Scripting .