Использование grep для поиска таблиц, вставляемых в файл SQL - PullRequest
1 голос
/ 21 декабря 2011

Я могу сделать следующее, чтобы найти файл для поиска операторов SQL INSERT:

$ cat my_sql_file.sql | grep INSERT

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

РЕДАКТИРОВАТЬ: Я также не хочу сортировать результаты. Я просто хочу получить результаты в том порядке, в котором grep нашел их в:).

Как вы можете это сделать?

Большое спасибо:).

Ответы [ 4 ]

1 голос
/ 21 декабря 2011

Я не знаю ни одного стандартного сценария оболочки, который бы позволял вам фильтровать uniq, когда uniq не являются смежными.Если вы согласны с использованием однострочного языка программирования / скрипта, такого как Haskell, Perl или Python, тогда должно работать что-то вроде этого:

cat file.txt | grep INSERT | ...

, где ... может быть одним из:

(в Хаскеле)

ghc -e 'let f o = getLine >>= \s -> if elem s o then f o else putStrLn s >> f (s : o) in f []'

Или Perl:

perl -e 'my %hash ; while (<>) { if (!$hash{$_}) { print $_; $hash{$_}=True; } }'

и т. Д.

1 голос
/ 21 декабря 2011

вы можете использовать grep, awk и sort для этого.Предположим, что sql для вставки выглядит примерно так:

"Вставить в имя таблицы ......"

Вы можете сделать:

grep -i insert | awk '{print $3}' | sort -u
1 голос
/ 21 декабря 2011

awk может сделать это очень скоро:

, если вы хотите, чтобы имена таблиц были только во Вставке

 awk '/INSERT INTO/ && !a[$3]++{print $3}' input.sql
1 голос
/ 21 декабря 2011
grep -i 'insert into' my_sql_file.txt \
| sed -e 's/.*insert into ([^ ]*).*/\1/i' \
| sort -u
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...