Como substituir todas as ocorrências após um determinado número com sed no OS X

2

Estou tentando modificar um arquivo .csv incorreto, em que a última 'coluna' foi dividida em um número diferente de colunas devido a caracteres , extras. Eu quero usar sed para manter as 4 primeiras vírgulas e substituir o restante por ; . O seguinte parece não funcionar no OS X:

sed 's/,/;/4g' file

Existe uma alternativa para isso no OS X?

    
por sodiumnitrate 09.04.2015 / 18:44

1 resposta

0

Eu não tenho uma caixa do OSX para testar, mas tente isto:

sed -E '
    s/^([^,]*),([^,]*),([^,]*),(.*)/\x1f\x1f\x1f/
    s/,/;/g
    s/\x1f/,/g
' file

Isso transforma as 3 primeiras vírgulas no caractere de controle ascii "unit separator", traduz todo o resto das vírgulas em ponto-e-vírgula e, em seguida, converte os caracteres de controle novamente em vírgulas.

Demo:

$ echo "a,b,c,d,e,f" | sed -E 's/^([^,]*),([^,]*),([^,]*),(.*)/\x1f\x1f\x1f/; s/,/;/g; s/\x1f/,/g'
a,b,c,d;e;f
    
por 09.04.2015 / 22:30