Если вы не можете гарантировать, что SQL находится в определенном формате, облегчающем выбор таблиц, вам потребуется лексический анализатор PLSQL / SQL.
Подробнее см. В этом разделе:
Где я могу найти официальную грамматику для языка программирования PL / SQL?
Чтобы проиллюстрировать мою точку зрения, возьмем такой пример:
SELECT a, b
FROM tabA, tabB
WHERE x = y;
будет работать, есливы grep 'FROM[:space:]' | cut -d' ' -f2
.
Но, если у вас есть:
SELECT a, b
FROM tabA,
tabB
WHERE c IN ( SELECT x
FROM tabC,
tabD
.
.
Тогда все становится сложнее, и вам нужен грамматический анализатор типа Lex / Yacc.
UPDATE, INSERTУДАЛИТЬ должно быть довольно простым:
egrep '(UPDATE|INSERT|DELETE)[:space:]' src.sql | cut -d' ' -f2
Должно помочь вам начать.
Но, как только вы получите больше цветочных макетов, вы обнаружите, что оно начинает пропускать вещи.