Tenho certeza que você também pode fazer isso em sed
, mas é muito mais fácil para mim em Perl:
perl -pe 's/([^,])\"/$1xxx/g; s/xxx,/\",/g; s/xxx/\"\"\"/g' data.txt
EXPLICAÇÃO:
-
perl -pe
: executa o script dado na linha de comando em cada linha do arquivo de entrada -
s/([^,])\"/$1xxx/g;
: substitui todas as ocorrências de"
precedidas por qualquer caractere não-vírgula com uma string aleatóriaxxx
. Isso pressupõe que seus dados nunca conterãoxxx
. -
s/xxx,/\",/g;
: substitua osxxx
que são seguidos por uma vírgula de volta para",
. -
s/xxx/\\"/g
: substitua o restante doxxx
pelas aspas com escape\"
, esses serão os"
que estavam nos seus dados.
EXEMPLO:
$ cat test.txt
"data","da"t"a","data","data","foo "bar" foo", "data"
$ perl -pe 's/([^,])\"/$1xxx/g; s/xxx,/\",/g; s/xxx//g' test.txt
"data","data","data","data","foo bar foo","data