Удалить конкретное слово в переменной


23

В bashсценарии, как я могу удалить слово из строки, слово будет храниться в переменной.

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

Ответы:


30

Пытаться:

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

Это также работает в 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"

Предполагается, что ваши слова разделены пробелами и имеют побочный эффект, который удаляет пробелы до и после "$WORDTOREMOVE".


17

Использование замены подстроки bash:

FOO = $ {FOO // $ WORDTOREMOVE /}

// заменяет все вхождения подстроки ($ WORDTOREMOVE) содержимым между / и}. В этом случае ничего.

Информацию об этом и других способах работы со строками в bash смотрите в разделе 10.1. Управление строками из расширенного руководства по написанию сценариев .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.