Dengan standar sed
, Anda tidak akan pernah melihat baris baru dalam teks yang dibaca dari file. Ini karena sed
membaca baris demi baris, dan karena itu tidak ada baris baru di akhir teks dari baris saat ini dalam sed
ruang pola. Dengan kata lain, sed
membaca data yang dibatasi baris baru, dan pembatas bukanlah bagian dari apa yang sed
dilihat 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 -E
sakelar di sini karena itu tidak diperlukan. Dengan itu, Anda bisa menulis
$ sed -E 's/[A-Za-z]+$/replace/' file.txt
Ini masalah selera.