Você pode usar o padrão de fim de padrão de espaço. O padrão $
corresponde à cadeia nula no final do espaço de padrão. Com esse padrão, você pode evitar usar rev
conforme recomendado acima.
$ echo machine1a | sed 's/a$/b/'
machine1b
Tenho o red-hat 5.1 da máquina linux
como substituir apenas o caractere único correto (a maior parte da string)
exemplo da minha sintaxe sed (não é bom porque substituiu os caracteres "a") l
echo machine1a | sed s'/a/b/g'
mbchine1b
Mas a resposta solicitada deve ser - machine1b e não mbchine1b
% echo machine1a | rev | sed s'/a/b/' | rev
machine1b
Não consigo encontrar uma maneira de fazer isso com sed sozinho. Há um sinalizador para a operação s especifica para substituir apenas a enésima partida, mas a contagem a partir do final não funciona.
% echo machine1a | sed s'/a/b/2'
machine1b
isso não é possível usando uma expressão sed simples. Em vez disso, faça algo assim, isto é, use os recursos de manipulação de strings do bash:
var=machine1a; echo "${var%?}b"
Mas se você realmente precisa sed, você pode executar o seguinte comando:
echo machine1a | sed s'/\(.*\)\(.\)$/b/g'
Desculpe pela confusão acima dizendo que não foi possível. Eu normalmente faço esse tipo de coisa no bash usando os recursos de manipulação de strings do bash.