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'