非常奇怪的情况。看看这个:
billy@prog:~/sql$ grep -R temp_exchange *.sp
billy@prog:~/sql$ grep -R temp_exchange *
events/sumup_events_by_exchange.sp:drop table if exists temp_exchange;
events/sumup_events_by_exchange.sp:create temporary table temp_exchange
所以 - 第一个grep没有回来,但第二个grep做了。因此 - 第一个grep应该返回一些东西,因为搜索到的字符串位于以.sp结尾的文件中(在第一个命令中指定)。
所以我不想用*参数化这个命令,因为这似乎是一个不好习惯。
任何其他方式,我可以做我想要的没有*?
TIA!
唐
答案 0 :(得分:1)
grep -R --include=*.sp temp_exchange *
最后一个参数(在本例中为*)告诉grep要搜索的文件和目录 这将导致grep搜索包含与模式匹配的所有顶级文件的文件列表,以及(在递归模式下)目录中的所有文件。
在这些目录中,您可以使用--include选项指定特定的文件模式。
来自http://ss64.com/bash/grep.html
-R
-r
--recursive
Read all files under each directory, recursively; this is equivalent to the -d recurse option.
--include=PATTERN
Recurse in directories only searching file matching PATTERN.
--exclude=PATTERN
Recurse in directories skip file matching PATTERN.
答案 1 :(得分:0)
因为* .sp在当前文件夹中是通配符。所以它最终会查找当前文件夹中所有文件和文件夹.sp。
执行ls *.sp
以查看您传递给命令的内容。它在你的例子中做了正确的事情。
您可能希望使用find
执行find . | grep "\.sp$" | xargs grep temp_exchange
或类似的变体