Измените все, кроме первого «,» на «» для каждой строки в файле (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 ... 

Спасибо!

Использование 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'