Entfernen Sie ein bestimmtes Wort in der Variablen

23

bashWie kann ich in einem Skript ein Wort aus einer Zeichenfolge entfernen, das in einer Variablen gespeichert wird?

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

Antworten:

30

Versuchen:

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

Diese arbeiten auch in 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"

Es wird davon ausgegangen, dass Ihre Wörter durch Leerzeichen getrennt sind und dass Leerzeichen davor und danach entfernt werden "$WORDTOREMOVE".

cuonglm
quelle
17

Verwenden des Ersetzens von Bash-Teilstrings:

FOO = $ {FOO // $ WORDTOREMOVE /}

Das // ersetzt alle Vorkommen der Teilzeichenfolge ($ WORDTOREMOVE) durch den Inhalt zwischen / und}. In diesem Fall nichts.

Informationen zu dieser und anderen Methoden zum Arbeiten mit Zeichenfolgen in Bash finden Sie in Abschnitt 10.1. Bearbeiten von Zeichenfolgen im Advanced Bash-Scripting Guide .

John
quelle