使用grep查询选择性文件

时间:2013-10-20 18:47:15

标签: regex linux shell unix grep

我有10个名称为1到10的文件夹。每个文件夹下都有多个文件。我想在选择性文件夹中寻找一个模式,例如在名为2到6的文件夹中包含的文件中。如何在shell上实现这一点?我知道有一种方法可以使用shell脚本中的for循环来实现它,如下所述:

for ((i=2;i<=6;i++)); do grep 'pattern' $i/*; done

但在这种情况下,它将触发5个不同的grep命令,最后我需要整理这些命令。

是否有直接的正则表达式语法来完成此任务?

2 个答案:

答案 0 :(得分:2)

如果我理解你的问题,你可以像以下那样进行支持扩展:

grep 'pattern' {2..6}/*

答案 1 :(得分:2)

您可以使用-r选项和--exclude-dir选项。

-r, --recursive
Read all files under each directory, recursively, following symbolic links only 
if they are on the command line.  This is equivalent to the -d recurse option.


--exclude-dir=DIR
Exclude directories matching the pattern DIR from recursive searches.

<强>演示

ls
f1 f2  f3  f4  f5  f6  f7  f8  f9 f10

每个文件夹都包含一个文件file,其中包含字符串abc

$ grep --exclude-dir 'f[1,7-9]' --exclude-dir 'f10' -r 'abc'       
f5/file:abc
f4/file:abc
f2/file:abc
f3/file:abc
f6/file:abc