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

Bash grep表示具有特定名称的目录中所有文件中的字符串,bash,directory,grep,find,Bash,Directory,Grep,Find,我在具有以下结构的目录中有csv文件: 20090120/ 20090121/ 20090122/ etc... 我想在这些目录中的所有csv文件中搜索特定字符串,但仅限于2009年1月,例如200901*/*.csv 是否有bash命令行参数可以执行此操作?是grep“某个字符串”200901*/*.csv您需要以下内容: grep NEEDLE 200901*/*.csv (当然,假设您的搜索字符串是NEEDLE,只需将其更改为您实际要查找的内容即可) bashshell能够扩展多级路径

我在具有以下结构的目录中有csv文件:

20090120/
20090121/
20090122/
etc...
我想在这些目录中的所有csv文件中搜索特定字符串,但仅限于2009年1月,例如200901*/*.csv


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

grep“某个字符串”200901*/*.csv

您需要以下内容:

grep NEEDLE 200901*/*.csv
(当然,假设您的搜索字符串是
NEEDLE
,只需将其更改为您实际要查找的内容即可)

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

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

尽管如此,假设您可以设置深度限制,您可以通过以下方式逃脱(三个级别):


试试这个:

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

尝试组合使用find搜索特定的文件名模式和grep查找模式:

find . -name "*.csv" -print -exec grep -n "NEEDLE" {} \; | grep -B1 "NEEDLE"
或者,你可以
find . -name "*.csv" -print -exec grep -n "NEEDLE" {} \; | grep -B1 "NEEDLE"