web-dev-qa-db-ja.com

変数内の特定の単語を削除する

bashスクリプトでは、文字列からWordを削除する方法を教えてください。Wordは変数に格納されます。

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

試してください:

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

これはksh93mkshzshでも機能します。


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"

単語がスペースで区切られていると想定し、"$WORDTOREMOVE"の前後のスペースを削除するという副作用があります。

36
cuonglm

Bash部分文字列置換の使用:

FOO = $ {FOO // $ WORDTOREMOVE /}

//は、サブストリング($ WORDTOREMOVE)のすべての出現箇所を、/と}の間のコンテンツに置き換えます。この場合は何もありません。

これとbashで文字列を操作する他の方法の詳細については、 高度なBashスクリプトガイド のセクション 10.1。文字列の操作 を参照してください。

26
John