คำเตือน : สิ่งนี้ไม่พิจารณาถึงการขึ้นบรรทัดใหม่ สำหรับคำตอบเชิงลึกเพิ่มเติมดูคำถามนี้แทน (ขอบคุณ Ed Morton และ Niklas Peter)
โปรดทราบว่าการหลีกหนีทุกอย่างเป็นความคิดที่ไม่ดี Sed ต้องการตัวละครมากมายที่ต้องหลบหนีเพื่อให้ได้ความหมายพิเศษของพวกเขา ตัวอย่างเช่นหากคุณหลีกเลี่ยงตัวเลขในสตริงการแทนที่มันจะเปลี่ยนเป็นการย้อนกลับ
ดังที่ Ben Blank กล่าวว่ามีอักขระเพียงสามตัวเท่านั้นที่จำเป็นต้องใช้ Escape ในสตริงการแทนที่
ESCAPED_REPLACE=$(printf '%s\n' "$REPLACE" | sed -e 's/[\/&]/\\&/g')
# Now you can use ESCAPED_REPLACE in the original sed statement
sed "s/KEYWORD/$ESCAPED_REPLACE/g"
หากคุณต้องการหลีกเลี่ยงKEYWORD
สตริงต่อไปนี้คือสิ่งที่คุณต้องการ:
sed -e 's/[]\/$*.^[]/\\&/g'
และสามารถใช้ได้โดย:
KEYWORD="The Keyword You Need";
ESCAPED_KEYWORD=$(printf '%s\n' "$KEYWORD" | sed -e 's/[]\/$*.^[]/\\&/g');
# Now you can use it inside the original sed statement to replace text
sed "s/$ESCAPED_KEYWORD/$ESCAPED_REPLACE/g"
จำไว้ว่าถ้าคุณใช้ตัวละครอื่นที่ไม่ใช่/
ตัวคั่นคุณต้องแทนที่เครื่องหมายทับในนิพจน์ข้างต้นด้วยอักขระที่คุณกำลังใช้ ดูความคิดเห็นของ PeterJCLaw สำหรับคำอธิบาย
แก้ไข:เนื่องจากบางกรณีที่มุมไม่ได้คิดไว้ก่อนหน้านี้คำสั่งด้านบนจึงเปลี่ยนไปหลายครั้ง ตรวจสอบประวัติการแก้ไขเพื่อดูรายละเอียด