ด้วยมาตรฐานsed
คุณจะไม่เห็นบรรทัดใหม่ในข้อความที่อ่านจากไฟล์ นี่เป็นเพราะsed
อ่านทีละบรรทัดดังนั้นจึงไม่มีการขึ้นบรรทัดใหม่ในตอนท้ายของข้อความของบรรทัดปัจจุบันในsed
พื้นที่รูปแบบของ กล่าวอีกนัยหนึ่งsed
อ่านข้อมูลที่มีการคั่นด้วยการขึ้นบรรทัดใหม่และตัวคั่นไม่ได้เป็นส่วนหนึ่งของสิ่งที่sed
สคริปต์เห็น
นิพจน์ทั่วไปสามารถยึดไว้ที่ท้ายบรรทัดโดยใช้$
(หรือที่จุดเริ่มต้นโดยใช้^
) การยึดนิพจน์ที่จุดเริ่มต้น / จุดสิ้นสุดของบรรทัดนั้นบังคับให้มันจับคู่ตรงนั้นและไม่ใช่แค่ที่ใดก็ตามบนบรรทัด
หากคุณต้องการแทนที่สิ่งที่ตรงกับรูปแบบ[A-Za-z]*
ที่จุดสิ้นสุดของบรรทัดด้วยบางสิ่งบางอย่างแล้วยึดรูปแบบเช่นนี้:
[A-Za-z]*$
... จะบังคับให้จับคู่ที่ส่วนท้ายของบรรทัดและไม่มีที่อื่น
อย่างไรก็ตามเนื่องจากไม่[A-Za-z]*$
ตรงกับสิ่งใด (ตัวอย่างเช่นสตริงว่างอยู่ที่ท้ายบรรทัดทุกบรรทัด) คุณต้องบังคับการจับคู่ของบางอย่างเช่นโดยระบุ
[A-Za-z][A-Za-z]*$
หรือ
[A-Za-z]\{1,\}$
ดังนั้นบรรทัดคำสั่งsedของคุณจะเป็นเช่นนั้น
$ sed 's/[A-Za-z]\{1,\}$/replace/' file.txt
ฉันไม่ได้ใช้-E
สวิตช์ที่นี่เพราะมันไม่จำเป็น ด้วยคุณสามารถเขียน
$ sed -E 's/[A-Za-z]+$/replace/' file.txt
มันเป็นเรื่องของรสนิยม