วิธีการแทนที่สตริงด้วยสตริงที่มีเครื่องหมายทับด้วย sed?


13

ฉันกำลังมองหาวิธีการแทนที่สตริงในไฟล์ด้วยสตริงที่มีเครื่องหมายทับโดยใช้ sed

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

ผลลัพธ์คือ:

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

คำตอบ:


31

ใช้อักขระอื่นเป็นตัวคั่นในsคำสั่ง:

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

หรือหลบหนีทับด้วย ksh93 ของ${var//pattern/replacement}ผู้ประกอบการขยายตัวพารามิเตอร์ (ตอนนี้ยังได้รับการสนับสนุนโดยzsh, bash, mksh, yashและรุ่นล่าสุดของ busybox sh)

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

+1 สำหรับวิธีที่สอง คนแรกไม่ทำงานบน freebsd
บราฮิม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.