Как заменить кавычки внутри поля в кавычках CSV-файла с помощью однострочной команды bash?

У меня есть файл, как это:

col1×col2×col3
12×"Some field with "quotes" inside it"×"Some field without quotes inside"

И я хотел бы заменить внутренние двойные кавычки одинарными кавычками, чтобы результат выглядел так:

col1×col2×col3
12×"Some field with 'quotes' inside it"×"Some field without quotes inside"

Я думаю, что это можно сделать с помощью sed, awk или ex, но я не смог найти простой и быстрый способ сделать это. Реальные CSV-файлы имеют порядок миллионов строк.

Предпочтительным решением будет использование одной строки с использованием вышеупомянутых программ.

Спасибо заранее!

1 ответ

Решение

Простой обходной путь с использованием sed, основанный на вашем разделителе полей ×, может быть:

 sed -E "s/([^×])\"([^×])/\1'\2/g" file

Это заменить каждый " который предшествует и сопровождается любыми символами, кроме ×, с ',

Обратите внимание, что sed не поддерживает позитивный прогноз, поэтому мы должны сгруппировать и повторно вставить шаблоны.

Другие вопросы по тегам