Извлечение имен таблиц базы данных из файла XML - PullRequest
1 голос
/ 06 февраля 2020

Я пытаюсь извлечь схему и имя таблицы из запроса sql внутри тега xml

Пример

<head>
<sql> select 1 from owner_a.table1 </sql>
<sql> select 1 from owner_b.table2 , owner_b.table3 where ... </sql>
<sql> select 1 from owner_c.table4 join owner_c.table5 on ... left join owner_c.table 6 on .. </sql>
<head>

Как вы можете заметить, sql возможно в другом формате.
- может или не может быть в ANSI
- может или не может содержать, где пункт

схема и имя таблицы также не имеют определенного шаблона c.

Чтобы извлечь sql из файла xml, я использовал xml_grep.

xlm_grep 'sql' --text_only $file.xml

Следующая задача и часть, в которой я застрял, - это получить схему и таблицу имя в этом выводе

schema  | table_name
owner_a | table1
owner_b | table2
owner_b | table3
owner_c | table4
owner_c | table5
owner_c | table6

подход, о котором я думаю -
для неанси-запросов -
- получить строку после слова "от" до "где "
- разделить строку, используя запятую в качестве разделителя, - снова разделить, используя". " в качестве разделителя для разделения схемы и имени таблицы

для запросов ANSI
- получить строку после слова "join"
- разделить с помощью "." как разделитель

это самый эффективный способ сделать это? это выполнимо с использованием grep, sed или awk?

1 Ответ

0 голосов
/ 02 мая 2020

Предполагая, что в вашем SQL есть пробел до и после имени таблицы.

Попробуйте

grep -o ' [a-z_]*\.[^ ]*' 

Демо:

$cat file1.txt 
<head>
<sql> select 1 from owner_a.table1 </sql>
<sql> select 1 from owner_b.table2 , owner_b.table3 where ... </sql>
<sql> select 1 from owner_c.table4 join owner_c.table5 on ... left join owner_c.table 6 on .. </sql>
<head>
$grep -o ' [a-z_]*\.[^ ]*' file1.txt  | tr '.' '|' 
 owner_a|table1
 owner_b|table2
 owner_b|table3
 |||
 owner_c|table4
 owner_c|table5
 |||
 owner_c|table
 ||
$


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...