Я пишу "переводчик" запросов SQL из ms-доступа к MySQL или MariaDB SQL на основе регулярного выражения с sed.
Моя проблема заключается в функции nz, которая имеет два формы:
access MariaDB or MySQL
nz(expr1,expr2) --> ifnull(expr1,expr2)
nz(expr) --> ifnull(expr,0)
У меня есть две эти стадии для каждого случая, но не только одна для обеих:
sed -E 's/nz\((.*),(.*)\)/ifnull\(\1,\2\)/gi'
sed -E 's/nz\((.*)\)/ifnull\(\1,0\)/gi'
Ты знаешь, как объединить обе только в одну стадию sed? Или, может быть, использовать другой инструмент как tr, awk или perl?
ОБНОВЛЕНИЕ
Для этого ввода:
SELECT nz(column1),nz(column2,4),column3 FROM table;
Требуемый вывод это:
SELECT ifnull(column1,0),ifnull(column2,4),column3 FROM table;