linux + sed - substitua apenas o caractere mais lado direito da string

5

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

    
por Eytan 15.05.2012 / 00:33

3 respostas

8

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
    
por 15.05.2012 / 01:31
2
% 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
    
por 15.05.2012 / 00:58
1

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.

    
por 15.05.2012 / 00:58

Tags