Видаліть певне слово зі змінної


23

У bashсценарії, як я можу видалити слово з рядка, це слово буде зберігатися у змінній.

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

Відповіді:


30

Спробуйте:

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

Це також працює в ksh93, mksh, zsh.


ВІДКЛЮЧНО:

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


17

Використання bash заміни підрядків:

FOO = $ {FOO // $ WORDTOREMOVE /}

// замінює всі виникнення підрядків ($ WORDTOREMOVE) вмістом між / і}. У цьому випадку нічого.

Інформацію про цей та інші способи роботи з струнами в bash див. У розділі 10.1. Маніпулювання Рядок в Розширеному керівництві Bash-Scripting .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.