Com o padrão sed
, você nunca verá uma nova linha no texto lido de um arquivo. Isso ocorre porque sed
lê linha por linha e, portanto, não há nova linha no final do texto da linha atual no espaço padrão em sed
. Em outras palavras, sed
lê dados delimitados por nova linha e os delimitadores não fazem parte do que um script sed
vê.
Expressões regulares podem ser ancoradas no final da linha usando $
(ou no início, usando ^
). Ancorar uma expressão no início / final de uma linha força-a a corresponder exatamente lá, e não apenas em qualquer lugar na linha.
Se você quiser substituir qualquer coisa que corresponda ao padrão [A-Za-z]*
no final da linha com algo, então ancore o padrão da seguinte forma:
[A-Za-z]*$
... irá forçá-lo a combinar no final da linha e em nenhum outro lugar.
No entanto, como [A-Za-z]*$
também corresponde a nada (por exemplo, a string vazia presente no final de todas linhas), você precisa forçar a correspondência de < em> algo , por exemplo especificando
[A-Za-z][A-Za-z]*$
Então, a sua linha de comando sed será
$ sed 's/[A-Za-z][A-Za-z]*$/replace/' file.txt
Eu não usei a opção -E
aqui porque não é necessária. Com isso, você poderia ter escrito
$ sed -E 's/[A-Za-z]+$/replace/' file.txt
É uma questão de gosto.