Я создал небольшой образец того, с чем я сейчас работаю.Я пытаюсь правильно заключить в кавычки значения DEFAULT, в частности значение # 2 DEFAULT ONE
должно быть заключено в кавычки как DEFAULT 'ONE'
:
#1 CREATE TABLE `table` (`column` int(10) unsigned DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
#2 ALTER TABLE `table` MODIFY COLUMN `column2` enum('ONE','TWO') NOT NULL DEFAULT ONE AFTER `column1`;
#3 ALTER TABLE `table` MODIFY COLUMN `column` varchar(64) NOT NULL DEFAULT '' FIRST;
В настоящее время я использую следующую строку против вышеуказанных строк, чтобы исправить строку# 2:
sed "s/DEFAULT \([a-zA-Z0-9_.]*\)/DEFAULT '\1'/g"
Это вывод, который я получаю:
#1 CREATE TABLE `table` (`column` int(10) unsigned DEFAULT 'NULL') ENGINE=InnoDB DEFAULT 'CHARSET'=utf8mb4 COLLATE=utf8mb4_unicode_ci;
#2 ALTER TABLE `table` MODIFY COLUMN `column2` enum('ONE','TWO') NOT NULL DEFAULT 'ONE' AFTER `column1`;
#3 ALTER TABLE `table` MODIFY COLUMN `column` varchar(64) NOT NULL DEFAULT '''' FIRST;
Как вы можете видеть, он исправляет строку № 2, но № 1 и № 3 теперь имеют проблемы.
#1 DEFAULT 'NULL' (should remain DEFAULT NULL)
#1 DEFAULT 'CHARSET' (should remain DEFAULT CHARSET)
#2 DEFAULT 'ONE' (GOOD!)
#3 DEFAULT '''' (should remain DEFAULT '')
Есть ли способ настроить sed, чтобы игнорировать определенные шаблоны, такие как DEFAULT NULL
или DEFAULT CHARSET
или DEFAULT ''
?
sed "s/DEFAULT (not followed by NULL|CHARSET|'')\([a-zA-Z0-9_.]*\)/DEFAULT '\1'/g"
Или, может быть, есть лучший подход?
Спасибо!