Cómo sustituir todas las ocurrencias después de un cierto número con sed en OS X

2

Estoy tratando de modificar un .csvarchivo incorrecto , donde la última 'columna' se divide en un número diferente de columnas debido a ,caracteres adicionales . Quiero usar sedpara mantener las primeras 4 comas y reemplazar el resto con ;. Lo siguiente parece no funcionar en OS X:

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

¿Hay alguna alternativa a esto en OS X?

nitrato de sodio
fuente

Respuestas:

0

No tengo una caja OSX para probar, pero intente esto:

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

Eso transforma las primeras 3 comas en el carácter de control ascii "separador de unidades", traduce el resto de las comas en punto y coma, luego traduce los caracteres de control nuevamente en comas.

Manifestación:

$ echo "a,b,c,d,e,f" | sed -E 's/^([^,]*),([^,]*),([^,]*),(.*)/\1\x1f\2\x1f\3\x1f\4/; s/,/;/g; s/\x1f/,/g'
a,b,c,d;e;f
Glenn Jackman
fuente