使用不区分大小写的文件名搜索文件中的字符串

时间:2016-06-08 09:40:19

标签: linux grep

我想在所有名称中都有特定模式且不区分大小写的文件中使用grep。

例如,如果我有两个文件ABC.txt和aBc.txt,那么我想要像

这样的东西
grep -i 'test' *ABC*

上述命令应该同时查看两个文件。

2 个答案:

答案 0 :(得分:0)

您可以使用find,然后使用grep对其结果:

find . -iname "*ABC*" -exec grep -i "test" {} \;

请注意,这会在找到的每个文件上运行一次grep。如果要对所有文件运行grep一次(在这种情况下,您可能会遇到命令行长度限制),最后可以使用加号:

find . -iname "*ABC*" -exec grep -i "test" {} \+

您还可以使用xargs更有效地处理大量结果:

find . -iname "*ABC*" -print0 | xargs -0 grep -i test

-print0使find输出以0结尾的结果,-0使xargs能够处理此格式,这意味着您不需要担心文件名中的任何特殊字符。但是,它不是完全可移植的,因为它是GNU扩展。

如果您没有find支持-print0(例如SVR4),那么 仍然可以使用-exec,如上所述

find . -iname "*ABC*" | xargs grep -i test

但是你应该确定你的文件名中没有新行,否则xargs会将文件名的每一行视为新参数。

答案 1 :(得分:0)

您应该使用find来匹配您想要的文件和搜索字符串以及支持正则表达式的命令grep,对于您的问题,您应该输入如下命令:

find . -name "*ABC*" -exec grep \<test\> {} \;