มีหลายประเด็น
ประการแรกเครื่องมือจัดฟัน {...}
ในนิพจน์ sed ของคุณไม่ตรงกับสิ่งใดในอินพุต ใน sed Basic Regular Expression วงเล็บปีกกาจะเป็นตัวอักษร ในขณะที่ใน Extended Regular Expression วงเล็บจะล้อมรอบปริมาณของแบบฟอร์ม {n,m}
. ไม่เคยใช้สำหรับการจัดกลุ่ม
ประการที่สอง ลำดับสีของคุณมีรูปแบบไม่ถูกต้อง - ช่องเปิดต้องเป็น \033[0;34ม
ค่อนข้างมากกว่า \033[0;34
ประการที่สาม อักขระแบ็กสแลช \
เป็นพิเศษใน sed - โดยเฉพาะอย่างยิ่ง เครื่องหมายแบ็กสแลชตามด้วยหลักทศนิยมบน RHS ของการแทนที่เป็นการอ้างอิงย้อนกลับไปยังกลุ่มการดักจับ อย่างน้อยก็ใน GNU sed \0
หมายถึง LHS ที่จับได้ทั้งหมดเทียบเท่ากับโทเค็นการแทนที่พิเศษ &
ตัวอย่างเช่น
$ เสียงสะท้อนฟู | sed 's/foo/\033bar/'
ฟู33บาร์
เพื่อส่งตัวอักษร \
สู่ภายนอก เสียงสะท้อน -e
คุณต้องการ \\
ภายในสตริงการแทนที่ sed
ในที่สุด, \
เป็น อีกด้วย พิเศษสำหรับเชลล์ ดังนั้นภายในเครื่องหมายอัญประกาศคู่ "อ่อน" จึงจำเป็นต้องมีเครื่องหมายแบ็กสแลชเพิ่มเติม ดังนั้น:
echo -e "$(echo "นี่คือข้อความที่ไม่มีสี" |
sed "s/นี่คือข้อความที่ไม่มีสี/นี่คือ \033[0;34ข้อความสีเขียว\033[0m/")"
หรือ (แทนที่อัญประกาศคู่ด้านในด้วยอัญประกาศเดี่ยว 'strong'):
echo -e "$(echo "นี่คือข้อความที่ไม่มีสี" |
sed 's/นี่คือข้อความที่ไม่มีสี/นี่คือ \033[0;34ข้อความสีเขียว\033[0m/')"
โปรดทราบว่าคุณไม่จำเป็นต้องใช้ ช
ตัวดัดแปลงเพื่อทำการแทนที่เพียงครั้งเดียวต่อบรรทัด
ดูสิ่งนี้ด้วย ฉันต้องหลีกเลี่ยงอักขระใดเมื่อใช้ sed ในสคริปต์ sh