Я работаю с каталогом сценариев SQL и пытаюсь найти упоминание tables.table
, которому не предшествует JOIN или FROM (потому что я пытаюсь определить, какие сценарии могут на самом деле изменять tables.table
, а не читатьот него).Поэтому я пытаюсь использовать отрицательный взгляд за , но мне интересно, не реализовано ли это просто на macOS
grep
, потому что оно не работает для меня.Вот что я использую:
grep -r "(?!JOIN )tables.table"
И MacOS печатает:
-bash: !JOIN: event not found
Я использую 10.13.16 macOS High Sierra на случай, если что-то изменится.Мои вопросы:
(1) Могу ли я негативно взглянуть на MacOS, и если да, то как?(2) Как я могу сделать отрицательный взгляд за спиной, который включает «или» (потому что я хочу найти случаи, где ни JOIN, ни FROM не предшествуют tables.table
.
**** Редактировать ****
Я попытаюсь предоставить MCVE (который, как я думал, у меня был выше), сгенерировав файлы примеров и объяснив проблему более подробно.У меня есть массивный и очень глубокий набор каталогов, содержащих сценарии SQL (иногда 4-5уровень каталогов ниже). Я не знаком с этими сценариями SQL, но меня попросили попытаться определить, какие сценарии SQL изменяют конкретные таблицы. С этой целью я хочу рекурсивно находить строки во всех этих файлах SQL, вложенных глубоко в различные каталоги.и подкаталоги, которые содержат упоминание конкретной таблицы (назовем ее table.tables), но только если имени этой таблицы не предшествует слово JOIN или FROM, поскольку это указывает на то, что это источник данных и не изменяется.
Допустим, у меня есть следующий набор файлов (с их путевыми именами):
/scripts/analysisA/prod/script.SQL
который содержит следующий текст:
blah blah blah
FROM table.tables
/scripts/analysisB/script2.SQL
, который содержит следующий текст:
blah blah blah
INNER JOIN table.tables
/scripts/script3.SQL
, который содержит следующий текст:
UPDATE table.tables
blah blah blah
тогда я хотел бы получить результат, который /scripts/script3.SQL
содержит строку UPDATE table.tables
, и это будет мой единственный возвращаемый результат для вышеупомянутого.
Я открыт для всех предложений о том, как этого добиться.Еще раз спасибо.