У меня есть файл в формате:

"data","data","data",data" .

Теперь, если в данных есть " , мой синтаксический анализатор не может проанализировать файл. Поэтому я хочу использовать sed для замены " на """ но не там, где он видит "," поскольку это, по сути, разделитель.

Я не могу понять, какими должны быть параметры sed.

1 ответ1

2

Я уверен, что вы также можете сделать это в sed но мне намного проще в Perl:

perl -pe 's/([^,])\"/$1xxx/g; s/xxx,/\",/g; s/xxx/\"\"\"/g' data.txt

ОБЪЯСНЕНИЕ:

  • perl -pe : выполнить скрипт, указанный в командной строке в каждой строке входного файла
  • s/([^,])\"/$1xxx/g; заменить каждое вхождение " которому предшествует любой не запятый символ, на случайную строку xxx . Это предполагает, что ваши данные никогда не будут содержать xxx .
  • s/xxx,/\",/g; заменить те xxx , за которыми следует запятая, обратно на ", ,.
  • s/xxx/\\\"/g : заменить остальные xxx на экранированные кавычки \" , это будут те " которые были в ваших данных.

ПРИМЕР:

$ 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

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