Xóa từ cụ thể trong biến


23

Trong một bashtập lệnh, làm thế nào tôi có thể loại bỏ một từ trong chuỗi, từ đó sẽ được lưu trữ trong một biến.

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

Câu trả lời:


30

Thử:

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

Điều này cũng làm việc trong ksh93, mksh, zsh.


VỊ TRÍ:

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"

Nó giả sử các từ của bạn được phân cách bằng dấu cách và có tác dụng phụ giúp loại bỏ khoảng trắng trước và sau "$WORDTOREMOVE".


17

Sử dụng thay thế chuỗi con bash:

FOO = $ {FOO // $ WORDTOREMISE /}

// thay thế tất cả các lần xuất hiện của chuỗi con ($ WORDTOREMOVE) bằng nội dung giữa / và}. Trong trường hợp này không có gì.

Để biết thông tin về điều này và các cách khác để làm việc với chuỗi trong bash, xem phần 10.1. Thao tác các chuỗi của Hướng dẫn Bash-Scripting nâng cao .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.