Назад | Перейти на главную страницу

linux + sed - заменить только крайний правый символ строки

У меня Linux машина red-hat 5.1

как заменить только правильный одиночный символ (большую часть строки)

пример из моего синтаксиса sed (не очень хорошо, потому что он заменил оба символа "a") l

 echo machine1a | sed s'/a/b/g'

 mbchine1b

Но запрошенный ответ должен быть - machine1b а не mbchine1b

Вы можете использовать шаблон конца пространства образца. Шаблон $ соответствует нулевой строке в конце пространства шаблонов. С помощью этого шаблона вы можете избежать использования rev как рекомендовано выше.

  $ echo machine1a | sed 's/a$/b/'
  machine1b
% echo machine1a | rev | sed s'/a/b/' | rev
machine1b

Я не могу найти способ сделать это только с помощью sed. В операции s есть флаг, указывающий на замену только N-го совпадения, но отсчет с конца не работает.

% echo machine1a | sed s'/a/b/2'
machine1b

это невозможно с использованием одного простого выражения sed. Вместо этого сделайте что-то вроде этого, т.е. использовать возможности манипулирования строками bash:

var=machine1a; echo "${var%?}b"

Но если вам ДЕЙСТВИТЕЛЬНО нужен sed, вы можете запустить следующую команду:

echo machine1a | sed s'/\(.*\)\(.\)$/\1b/g'

Извините за путаницу выше, сказав, что это было невозможно. Обычно я делаю подобные вещи в bash, используя возможности обработки строк в bash.