Если у вас есть данные, которые могут содержать кавычки в кавычках, простого регулярного выражения будет недостаточно.Вы можете попытаться найти другое решение, но лучшим способом может быть использование модуля CSV, такого как Text :: CSV_XS для этой части вашей строки.
Существует многоопций и функциональности для модуля Text :: CSV_XS , и он может быть немного инвазивным, но его, вероятно, можно настроить для работы с вашими данными.Попробуйте что-нибудь в этом духе.Обязательно сохраняйте резервные копии.
Использование: script.pl input.txt > output.txt
Код:
use strict;
use warnings;
use Text::CSV_XS;
while (<>) {
my $csv = Text::CSV_XS->new ({
binary => 1,
keep_meta_info => 1,
allow_whitespace => 1,
});
my ($pre, $str, $post) = /^(.* VALUES *\()([^)]+)(\).*)$/;
$csv->parse($str);
my @cols = $csv->fields();
my $n = 4; # The N-th field
splice @cols, $n, 1, "null";
$csv->combine(@cols);
print $pre, $csv->string(), $post;
}