Grep工具,用于搜索多个文件中的多个字符串

时间:2012-07-09 19:52:21

标签: c# java sql string grep

我意识到在这个论坛上似乎有很多问题要搜索文件中的多个字符串,但我找不到在多个文件中搜索多个字符串的解决方案。

使用管道分隔的搜索结果始终是OR语句。我想要的是提供“AND”语句的东西,无论是正则表达式还是允许多个输入的工具。

我尝试过dnGrep,WinGrep,PowerGrep和BareGrep,但这些似乎都没有提供此功能。对于那些grep存储过程的人,我相信你理解我的痛苦。

我正在尝试搜索存储过程中存在共享相同通用列名的几个表并且使用别名表名称的情况,这变得非常麻烦,因为我不能只搜索TableName.ColumnName。

如果有人能帮助我,这将是非常棒的。如果有人知道某个工具或者自己编写了一个工具,那就太好了。搜索java和c#代码也很有用。

2 个答案:

答案 0 :(得分:3)

我假设您要查找给定目录中包含pattern1,pattern2和pattern3的所有文件:

grep -r -l pattern1 . | xargs grep -l pattern2 | xargs grep -l pattern3

-r选项recurses以检查所有文件。 -l只列出匹配的文件。 xargs将前一个grep中的文件列表转换为下一个grep的输入参数。如果你有很多模式,你可以将它们放在一个脚本或花哨的别名中。

如果要将搜索限制为某些文件类型,可以使用find首先限制输入文件:

find . -name "*.h" | xargs grep -l pattern1 | xargs grep -l pattern2 | xargs grep -l pattern3

答案 1 :(得分:2)

创建一个批处理文件search.bat,其中包含以下内容:

@echo off
for /F "usebackq delims=|" %%I in (`findstr /M /C:%2 %1`) do findstr /M /C:%3 "%%I"

search.bat有三个参数。第一个是通配符文件名。第二个和第三个是搜索字符串。例如,

search *.h deprecated security

查找包含“deprecated”和“security”字样的所有头文件。