Dengan standar sed, Anda tidak akan pernah melihat baris baru dalam teks yang dibaca dari file. Ini karena sedmembaca baris demi baris, dan karena itu tidak ada baris baru di akhir teks dari baris saat ini dalam sedruang pola. Dengan kata lain, sedmembaca data yang dibatasi baris baru, dan pembatas bukanlah bagian dari apa yang seddilihat skrip.
Ekspresi reguler dapat ditambatkan di akhir baris menggunakan $(atau di awal, menggunakan ^). Mengaitkan suatu ekspresi pada awal / akhir suatu garis memaksanya untuk mencocokkan dengan tepat di sana, dan tidak hanya di mana saja pada garis tersebut.
Jika Anda ingin mengganti apa pun yang cocok dengan pola [A-Za-z]*di akhir baris dengan sesuatu, maka jangkar pola seperti ini:
[A-Za-z]*$
... akan memaksanya untuk mencocokkan di akhir baris dan di tempat lain.
Namun, karena [A-Za-z]*$juga tidak cocok dengan apa pun (misalnya, string kosong hadir di akhir setiap baris), Anda perlu memaksakan pencocokan sesuatu , misalnya dengan menentukan
[A-Za-z][A-Za-z]*$
atau
[A-Za-z]\{1,\}$
Jadi, baris perintah sed Anda akan demikian
$ sed 's/[A-Za-z]\{1,\}$/replace/' file.txt
Saya tidak menggunakan -Esakelar di sini karena itu tidak diperlukan. Dengan itu, Anda bisa menulis
$ sed -E 's/[A-Za-z]+$/replace/' file.txt
Ini masalah selera.