使用grep查找使用SQL文件插入的表

时间:2011-12-21 15:36:52

标签: linux grep

我可以执行以下操作来搜索文件以查找SQL INSERT语句:

$ cat my_sql_file.sql | grep INSERT

但我想缩小搜索范围,找到SQL转储插入的唯一表。

编辑:我也不希望结果排序。我只想按照grep找到它们的确切顺序得到结果:)。

你怎么能这样做?

非常感谢:)。

4 个答案:

答案 0 :(得分:1)

grep -i 'insert into' my_sql_file.txt \
| sed -e 's/.*insert into ([^ ]*).*/\1/i' \
| sort -u

答案 1 :(得分:1)

您可以使用grep,awk和sort来执行此操作。假设插入的sql是这样的:

“插入表名......”

你可以这样做:

grep -i insert | awk '{print $3}' | sort -u

答案 2 :(得分:1)

awk可以很快完成:

如果您只想要插入

中的表名
 awk '/INSERT INTO/ && !a[$3]++{print $3}' input.sql

答案 3 :(得分:1)

我不知道任何标准的shell脚本允许你在uniq不相邻时过滤uniq。如果您可以使用单线程编程语言/脚本(如Haskell,Perl或Python),那么这样的东西应该可以工作:

cat file.txt | grep INSERT | ...

其中......可能是以下之一:

(在Haskell中)

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; } }'