Регулярное выражение для получения по запросу имен таблицы базы данных из .sql файлов

Я надеюсь искать свой каталог запросов SQL и для самых распространенных таблиц базы данных во всех файлах. Для этого я надеюсь использовать grep для изоляции этих имен, но я не могу вполне выяснить регулярное выражение для получения по запросу просто имен таблиц.

Я фигурирую для изоляции таблиц, я ищу строку текста после слов ОТ или СОЕДИНЕНИЯ.

Я надеющийся люди могут помочь мне создать прочь из этого, но в настоящее время мои grep операторы просто находят случаи этих слов, но как я дергаю за ниточку, непосредственно продолжающуюся эти ключевые слова?

grep -R "FROM" | grep -R  "JOIN"
1
задан 12 July 2016 в 09:31

1 ответ

Я вытянул некоторые демонстрационные запросы от Google и сделал пару sql файлы со следующими данными в них, например, цели:

<час> file1.sql

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;
SELECT Customers.CustomerName, Orders.OrderID
INTO CustomersOrderBackup2013
FROM CustomersOriginal
LEFT JOIN Orders
ON Customers.CustomerID=Orders.CustomerID;

file2.sql

-- Dumping data for table `user_details`
INSERT INTO `user_details` (`user_id`, `username`, `first_name`, `last_name`, `gender`, `password`, `status`) VALUES
(1, 'rogers63', 'david', 'john', 'Female', 'e6a33eee180b07e563d74fee8c2c66b8', 1);

первой вещью, которую Вы ищете, является операция ИЛИ для grep:

$ grep 'INTO\|FROM\|JOIN' *.sql
file1.sql:FROM Orders
file1.sql:INNER JOIN Customers
file1.sql:INTO CustomersOrderBackup2013
file1.sql:FROM CustomersOriginal
file1.sql:LEFT JOIN Orders
file2.sql:INSERT INTO `user_details` (`user_id`, `username`, `first_name`, `last_name`, `gender`, `password`, `status`) VALUES

, Который получит все строки из исходных файлов. Затем давайте использовать sed для вытаскивания имен таблиц:

$ grep 'INTO\|FROM\|JOIN' *.sql | sed -r 's/.*?(FROM|INTO|JOIN)\s`?([^` ]*).*/\2/g'
Orders
Customers
CustomersOrderBackup2013
CustomersOriginal
Orders
user_details

Наконец, давайте устраним дублирующиеся таблицы:

$ grep 'INTO\|FROM\|JOIN' *.sql | sed -r 's/.*?(FROM|INTO|JOIN)\s`?([^` ]*).*/\2/g' | sort -u
Customers
CustomersOrderBackup2013
CustomersOriginal
Orders
user_details
2
ответ дан 7 December 2019 в 13:43

Другие вопросы по тегам:

Похожие вопросы: