Hapus kata tertentu dalam variabel

23

Dalam bashskrip, bagaimana saya bisa menghapus kata dari string, kata itu akan disimpan dalam variabel.

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

Jawaban:

30

Mencoba:

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

Ini juga bekerja di 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"

Diasumsikan bahwa kata-kata Anda dibatasi oleh ruang dan memiliki efek samping yang menghilangkan spasi sebelum dan sesudah "$WORDTOREMOVE".

cuonglm
sumber
17

Menggunakan pengganti bash substring:

FOO = $ {FOO // $ WORDTOREMOVE /}

// menggantikan semua kemunculan substring ($ WORDTOREMOVE) dengan konten antara / dan}. Dalam hal ini tidak ada.

Untuk informasi tentang ini dan cara-cara lain untuk bekerja dengan string dalam bash, lihat bagian 10.1. Memanipulasi String dari Lanjutan Bash-Scripting Guide .

John
sumber