Измените все, кроме первого «,» на «» для каждой строки в файле (bash)

Я использую bash и у меня есть файл csv (dat.csv), который должен содержать только два столбца (App, Blurb) данных, но из-за большого количества символов ‘,’ в каждой строке он становится МНОГО столбцов.

ПРИМЕР ПРОБЛЕМЫ csv.dat:

App , Blurb diff, this is the diff program, bla bla bla, yadda yadda word, this is ms product, it is not very good, I dont like it dd, this is a Linux disk application , its awesome!, bla bla, ttly ... 

Проблема, с которой я столкнулся, состоит в том, что, поскольку в столбце «Blurb» есть дополнительные «,» данные передаются по конвейеру в последующие столбцы (c, d и т. Д.) Файла dat.csv.

objective состоит в том, чтобы все, кроме первого ‘,’ из каждой строки были изменены на “COMMA”, чтобы все данные “Blurb” оставались в столбце B.

Например, желаемый результат:

  App, Blurb diff, this is the diff program bla bla bla yadda yadda word, this is ms product it is not very good I dont like it dd, this is a Linux disk application  its awesome!bla bla ttly ... 

Спасибо!

3 Solutions collect form web for “Измените все, кроме первого «,» на «» для каждой строки в файле (bash)”

Использование GNU sed :

 sed 's/,//2g' infile 

Или портативность:

 sed 's/,//g; s//,/' infile 

Вы также можете сделать это в POSIX следующим образом:

 sed -e ' y/,/\n/ ;# change all commas to newlines, which are guaranteed to not be there s/\n/,/ ;# then change the first of those newlines to a comma, ie, restore s///g ;# and all the remaining newline(s) change to  ' dat.csv 

Может быть, вы можете поместить кавычки вокруг полей, которые должны сказать парсерам csv, что запятые внутри не являются разделителями полей:

 sed 's/"/""/g; # escape existing " as "" s/[[:space:]]*,[[:space:]]*/","/; # replace the first , and the # whitespace around it with "," s/^[[:space:]]*/"/; # add a " at the start (and # get rid of whitespace there) s/[[:space:]]*$/"/; # same at the end' 
  • Как переформатировать блоки зоны named.conf в одну строку?
  • Поиск греческого из командной строки
  • Добавить во второй столбец
  • Что возвращает cut, если указанное поле не существует?
  • Подберите patternA и напечатайте его только тогда, когда сопоставляется patternB, включая следующую строку
  • Пробуждение к среднему столбцу на основе ключа во 2-м столбце
  • Извлечь несколько вхождений в одну строку строки между двумя разделителями
  • Сравнить строки в файле с общим последним столбцом, но другим в другом столбце
  • печатать строки, если разделенные запятыми поля совпадают в другой строке
  • Отобразить совпадающую строку и ближайшую предыдущую строку, соответствующую другому шаблону
  • Как объединить первые две строки CSV столбец за столбцом?
  • Linux и Unix - лучшая ОС в мире.