繁体   English   中英

如何使用ack(最好是ack)或grep来搜索文件列表中的字符串?

[英]How can I use ack (preferably ack) or grep to search for a string in a list of files?

我想在任何名为search-this-one.html的文件中搜索字符串“my-search-string”

在我当前工作目录的所有子目录中。

我想要一个包含此字符串的文件的完整路径列表。 有数百个文件名为search-this-one.html,其中任意数量的文件都可以包含该字符串。

有没有人做过这样的成功。

我可以得到像这样的文件列表..

find . -type f -name "search-this-one.html"

我已经尝试了各种grep和ack开关,所有其他相关的答案只搜索与搜索字符串匹配的文件名。

你可以使用xargs

find . -type f -name "search-this-one.html" | xargs grep "my-search-string"

使用额外的-l切换到grep ,您将获得没有完全匹配位置的匹配文件列表。

如果你正在运行ack 2.x,你可以使用-x选项从STDIN获取输入,就像xargs一样。

ack -g search-this-one.html | ack -x pattern

ack -g表示“查找名称与search-this-one.html匹配的任何文本文件”,然后将其传送到ack -x ,它从STDIN获取其输入文件列表。

也适用于使用正则表达式搜索文件名:

ack -g '\.*.conf$' | ack -x searchString

find命令中添加-exec

find . -type f -name "search-this-one.html" -exec grep "my-search-string" {} \;

因此find将输出将执行命令grep "my_search_string"的文件名列表。

要获取文件以及发生这种情况的事件,请将-H添加到grep

find . -type f -name "search-this-one.html" -exec grep -H "my-search-string" {} \;

无论它有什么价值,我都没有找到使用ack做到这一点的简洁方法,但以下工作:

ack --type-add foo:is:search-this-one.html --foo my-search-string

说明:

  • --type-add foo:is:search-this-one.html :这会添加(在这一个命令的持续时间内)一个新类型foo ,定义为名称is search-this-one.html所有文件
  • --foo :仅搜索foo类型的文件

此外,对于@fedorqui等人,您可以使用-exec cmd {} +选项进行查找, 运行之前将所有匹配的文件名放入命令中,避免需要-H标志:

find . -name search-this-one.html -type f -exec grep "my-search-string" {} +

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM