Por que um espaço extra é removido no comando sed substitution?

3

Eu tenho um arquivo de dados com os seguintes dados:

abcd.vc.9902 03493092 90239 m
abc 131323 78202 g
cdb.5491-3 03402394 23241 k

Estou tentando remover os dígitos que começam com espaço. Então o comando que eu escrevi foi

sed 's/ [0-9]*//g' data

Isso produz a seguinte saída

abcd.vc.9902m
abcg
cdb.5491-3k

Se você perceber, ele se livrou do espaço antes da última letra. A saída que desejo é:

abcd.vc.9902 m
abc g
cdb.5491-3 k
    
por The Next Programmer 03.02.2016 / 04:26

1 resposta

4

Simplesmente substitua * por + (e escape se você estiver usando apenas sed , não sed -r , já que + é um padrão estendido de Regex):

sed 's/ [0-9]\+//g' data

Ou

sed -r 's/ [0-9]+//g' data

Em Regex * indica zero ou mais correspondência do token anterior, portanto, no seu caso, se não houver correspondência, ou seja, nenhum dígito depois do espaço também será correspondido.

Por outro lado, se você usa + , você está combinando (pelo menos) um ou mais dígitos depois de um espaço para que você obtenha o resultado desejado.

    
por heemayl 03.02.2016 / 04:31

Tags