У меня 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.