Con el estándar sed, nunca verá una nueva línea en el texto leído de un archivo. Esto se debe a que sedlee línea por línea y, por lo tanto, no hay una nueva línea al final del texto de la línea actual en sedel espacio del patrón. En otras palabras, sedlee datos delimitados por nueva línea, y los delimitadores no son parte de lo que sedve un script.
Las expresiones regulares se pueden anclar al final de la línea usando $(o al principio, usando ^). Anclar una expresión al inicio / final de una línea la obliga a coincidir exactamente allí, y no en cualquier lugar de la línea.
Si desea reemplazar cualquier cosa que coincida con el patrón [A-Za-z]*al final de la línea con algo, entonces ancle el patrón de esta manera:
[A-Za-z]*$
... lo obligará a coincidir al final de la línea y en ningún otro lugar.
Sin embargo, dado que [A-Za-z]*$tampoco coincide con nada (por ejemplo, la cadena vacía presente al final de cada línea), debe forzar la coincidencia de algo , por ejemplo, especificando
[A-Za-z][A-Za-z]*$
Entonces, su línea de comando sed será
$ sed 's/[A-Za-z][A-Za-z]*$/replace/' file.txt
No utilicé el -Einterruptor aquí porque no es necesario. Con eso, podrías haber escrito
$ sed -E 's/[A-Za-z]+$/replace/' file.txt
Es cuestión de gustos.
+: PUEDES usarlo incluso sin usar expresiones regulares extendidas, solo recuerda escribirlo como\+. Asísed -e 's/[A-Za-z]\+$/replace/' file.txtfuncionará perfectamente incluso sin GNUsedinstalado. Y no se debe olvidar: no lo use-E, ya que GNUsedno lo admite .