2010-02-15 5 views
0

У меня есть грузовик с файлами с командами sql в них, мне было предложено извлечь все имена таблиц базы данных из файлов Как использовать grep и sed для разбора файлов и создания списка уникальные имена таблиц в текстовом файле .. в строке?Команда grep и sed

имена имен, похоже, начинаются с «db_», что удобно!

Какой бы лучший способ использовать grep и sed вместе, чтобы вытащить имена таблиц?

+1

Можете ли вы опубликовать пример того, что файлы SQL выглядеть? –

+1

Почти любой ответ, который вы получаете от sed/grep, в основном будет подтверждать ваше предположение. То есть если вы начнете с поиска 'db_', это именно то, что вы собираетесь получить, независимо от того, насколько это точно - любые строки, которые начинаются таким образом, будут показаны, даже если они не являются именами таблиц, и любые строки, которые не соответствуют этому шаблону, не будут отображаться, даже если они относятся к таблицам. К сожалению, правильный ответ потребует (почти) полного анализатора SQL ... –

ответ

6

Это будет поиск строк, содержащих имена таблиц. Выход из этого будет быстро выявить, если более селективный поиск необходим:

grep "\<db_[a-zA-Z0-9_]*" *.sql 

После надлежащего поиска сортируется, удалите все другие символы из строки с tablenames:

grep "\<db_[a-zA-Z0-9_]*" *.sql | sed 's/.*\(\<db_[a-zA-Z0-9_]*\).*/\1/' 

После того, как это работает, добавить на своем роде и удалить дубликаты:

(same last pipe expression) | sort | uniq 
+1

+1. Чтобы поймать потенциально несколько имен таблиц в одной строке, вы можете разделить строки на tr: 'grep .. * .sql | tr '' '\ n' | grep .. | sed'. Первый grep состоит в том, чтобы облегчить нагрузку на 'tr', второй grep - отфильтровать части« db_ ». – orip

0

вам просто нужно Grep

grep -owE "db_[a-zA-Z0-9]+" file|sort -u 

или AWK

awk '{for(i=1;i<=NF;i++)if($i~/^db_[a-zA-Z0-9]+/){print $i} }' file 

 Смежные вопросы

  • Нет связанных вопросов^_^