grep表示具有特定名称的目录中的所有文件中的字符串

时间:2013-01-02 02:37:23

标签: bash directory grep find

我在具有这种结构的目录中有csv文件:

20090120/
20090121/
20090122/
etc...

我想在这些目录中的所有csv文件中grep某个字符串,但仅限于2009年1月,例如200901 * / *。CSV

是否有可以执行此操作的bash命令行参数?

4 个答案:

答案 0 :(得分:12)

是。 grep "a certain string" 200901*/*.csv

答案 1 :(得分:5)

您需要以下内容:

grep NEEDLE 200901*/*.csv

(假设您的搜索字符串当然是NEEDLE - 只需将其更改为实际寻找的任何内容。

bash shell非常能够扩展多级路径和文件名。

那当然只限于一个目录下的CSV文件。如果要搜索整个子树,则必须使用略微模式复杂(且适应性强)的find命令。

虽然,假设您可以设置深度限制,您可以使用类似的东西(三个级别):

grep NEEDLE 200901*/*.csv 200901*/*/*.csv 200901*/*/*/*.csv 

答案 2 :(得分:4)

试试这个:

grep -lr "Pattern" 200901*/*.csv 

答案 3 :(得分:0)

尝试结合使用查找来搜索特定的文件名模式,然后使用 grep 来查找模式:

find . -name "*.csv" -print -exec grep -n "NEEDLE" {} \; | grep -B1 "NEEDLE"