При использовании стандарта 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
Это вопрос вкуса.