我可以执行以下操作来搜索文件以查找SQL INSERT语句:
$ cat my_sql_file.sql | grep INSERT
但我想缩小搜索范围,找到SQL转储插入的唯一表。
编辑:我也不希望结果排序。我只想按照grep
找到它们的确切顺序得到结果:)。
你怎么能这样做?
非常感谢:)。
答案 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; } }'
等