2

Я пытаюсь изменить плохой .csv файл, в котором последний «столбец» разбивается на различное число столбцов из - за , символы. Я хочу использовать sed чтобы оставить первые 4 запятые, а остальные заменить на ; , Кажется, что следующее не работает на OS X:

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

Есть ли альтернатива этому в OS X?

1 ответ1

0

У меня нет OSX-бокса для тестирования, но попробуйте это:

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

Это преобразует первые 3 запятые в управляющий символ ascii "разделитель единиц", переводит все остальные запятые в точки с запятой, а затем переводит управляющие символы обратно в запятые.

Демо-версия:

$ 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .