Use o comando sed para substituir, aparecendo entre números

4

Eu tenho um arquivo CSV onde os dados estão no seguinte formato

|001|,|abc,def|,123456,789,|aaa|,|bbb|,444,555,666

Eu quero substituir apenas os "," que aparecem entre números com algum outro caractere como, por exemplo, SOH ou $ ou *

outro "," que aparece na linha não deve ser substituído, ou seja, eu gostaria de ter a seguinte saída

|001|,|abc,def|,123456*789,|aaa|,|bbb|,444*555*666

Alguém por favor pode me ajudar com o padrão de comando sed para obter a saída desejada acima

    
por Saurabh 20.12.2010 / 14:19

2 respostas

5

Tente isso

sed 's/\([0-9]\),\(-\?[0-9]\)/\*/g'

A primeira seção corresponde a um dígito seguido por uma vírgula seguida por um dígito ou um -. A próxima seção simplesmente regurgita o primeiro dígito, o caractere de substituição e, em seguida, o último dígito.

Isso detectará qualquer padrão como "#, #" ou "#, - #", incluindo alguns que podem não ser desejados (por exemplo, "abc123, -def" - > "abc123 * -def"). Corrigir isso requer mais conhecimento do fluxo de entrada. (veja os comentários para detalhes).

    
por 20.12.2010 / 15:30
0

A seguir parece funcionar:

sed 's/\([0-9]\),\([-0-9]\)/\*/g'
    
por 21.12.2010 / 08:46