Exclui o último caractere em uma palavra, mas somente se o caractere estiver lá - no bash

8

Como remover o último caractere somente se ele estiver lá?

entrada:

OpenOffice.org/m
openOffice.org/ozm
Pers.
Pfg.
phil.
Prof.
resp.
Roonstr./m
roonstr./ozm

resultado desejado:

OpenOffice.org
openOffice.org
Pers
Pfg
phil
Prof
resp
Roonstr
roonstr

Cheguei tão longe que só resta o ponto, mas infelizmente o último comando sed também remove a letra g : $ cat filename | grep "\." | cut -d"/" -f1 | sed 's/.$//'

    
por removelastdotonlyifitsthere 15.08.2012 / 09:16

1 resposta

9

Você só precisa escapar do ponto no comando sed e tudo ficará bem. Assim:

sed 's/\.$//'

Como no caso de você não escapar, .$ corresponderá a qualquer caractere no final da string.

Você também pode colocar todos os seus sed + grep + cut em apenas um sed :

sed 's=/[^/]*$==;s/\.$//' filename
    
por 15.08.2012 / 09:23