Làm thế nào để thay thế một chuỗi bằng một chuỗi chứa dấu gạch chéo bằng sed?


13

Tôi đang tìm cách thay thế một chuỗi trong một tệp bằng một chuỗi chứa dấu gạch chéo bằng cách sử dụng sed.

connect="192.168.100.61/foo"
srcText="foo.bar=XPLACEHOLDERX"
echo $srcText | sed "s/XPLACEHOLDERX/$connect"

Kết quả là:

sed: -e Expression #1, Character 32: Unknown option for `s'

Câu trả lời:


31

Sử dụng một ký tự khác làm dấu phân cách trong slệnh:

printf '%s\n' "$srcText" | sed "s|XPLACEHOLDERX|$connect|"

Hoặc loại bỏ các dấu gạch chéo với ksh93 của ${var//pattern/replacement}nhà khai thác mở rộng tham số (bây giờ cũng được hỗ trợ bởi zsh, bash, mksh, yashvà các phiên bản gần đây của busybox sh).

printf '%s\n' "$srcText" | sed "s/XPLACEHOLDERX/${connect//\//\\/}/"

+1 cho cách thứ hai. cái đầu tiên không hoạt động trên freebsd.
ibrahim

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.