shell脚本:通过在文件夹中的所有文件中搜索来查找字符串? [复制]
Posted
技术标签:
【中文标题】shell脚本:通过在文件夹中的所有文件中搜索来查找字符串? [复制]【英文标题】:shell script : find a string by searching inside all the files in a folder? [duplicate] 【发布时间】:2015-09-08 14:15:21 【问题描述】:如何在包含隐藏文件和子文件夹的文件夹中找到包含在(可能是多个)文件中的字符串?
我试过这个命令:
find . -maxdepth 1 -name "tes1t" -print0 | sed 's,\.\/,,g'
但这没有产生任何结果。
【问题讨论】:
【参考方案1】:首先,您的maxdepth
应该是2
而不是1
,现在您的find 命令不会下降到子目录中。此外,您可以在find
的输出中简单地使用grep 作为您的模式。这可以通过以下方式实现:
find . -maxdepth 2 -type f -exec grep 'pattern here' '' \;
解释:
find .
在当前目录执行find
。
-maxdepth 2
不会进一步下到子目录中。
-type f
查找每个不是目录的文件。
-exec grep 'pattern' ''
以特定模式执行 grep
语句,
包含找到的每个文件的文件名。
为 grep 添加选项以进行颜色突出显示、输出行号和/或文件名。
有关详细信息,请参阅 man find
和 man grep
。
【讨论】:
或者如果您的意图是递归地遍历子目录的子目录,那么您可能根本不应该拥有-maxdepth
。这个问题不是很清楚。
@tripleee true,我只是认为 OP 想要限制递归级别,因为他包含了该选项。我会将您的评论添加到答案中,感谢您指出这一点!【参考方案2】:
grep -Hnr PATTERN .
如果你的 grep 支持-r
(递归,=-d recurse
)。请注意,递归深度将没有限制。
或者试试grep -d skip -Hn PATTERN ,.[!.]*,/,.[!.]*
;这应该可以工作,因为 grep 接受多个文件参数。如果您的grep
版本不支持它,请丢弃-d skip
的东西。对于没有大括号扩展的 shell,请使用手动扩展形式 * */* */.[!.]* .[!.]* .[!.]*/* .[!.]*/.[!.]*
。
【讨论】:
你不需要extglob
。只需grep PATTERN .[!.]* * */.[!.]* */*
其中[!.]
指定“除.
之外的任何字符”(以防止进入父目录..
)。
是的,这是一个病态的答案,很棒的东西!以上是关于shell脚本:通过在文件夹中的所有文件中搜索来查找字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章