Eu peguei algumas consultas de amostra do Google e fiz alguns arquivos sql com os seguintes dados nelas, por exemplo:
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);
A primeira coisa que você está procurando é o operador OR para 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
Isso obterá as linhas inteiras dos arquivos originais. Em seguida, vamos usar sed para extrair os nomes das tabelas:
$ grep 'INTO\|FROM\|JOIN' *.sql | sed -r 's/.*?(FROM|INTO|JOIN)\s'?([^' ]*).*//g'
Orders
Customers
CustomersOrderBackup2013
CustomersOriginal
Orders
user_details
Por fim, vamos eliminar as tabelas duplicadas:
$ grep 'INTO\|FROM\|JOIN' *.sql | sed -r 's/.*?(FROM|INTO|JOIN)\s'?([^' ]*).*//g' | sort -u
Customers
CustomersOrderBackup2013
CustomersOriginal
Orders
user_details