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

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

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

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

Quero substituir apenas aqueles "," que aparecem entre os números por algum outro caractere, como SOH ou $ ou *

outro "," que aparece na linha não deve ser substituído, ou seja, para dizer que desejo ter a seguinte saída

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

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

Responder1

Experimente isso

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

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

Isto irá capturar 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.)

Responder2

O seguinte parece funcionar:

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

informação relacionada