我想在所有名称中都有特定模式且不区分大小写的文件中使用grep。
例如,如果我有两个文件ABC.txt和aBc.txt,那么我想要像
这样的东西grep -i 'test' *ABC*
上述命令应该同时查看两个文件。
答案 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\> {} \;