![如何同时 grep 查找相同的字符串但多个文件?](https://linux22.com/image/59973/%E5%A6%82%E4%BD%95%E5%90%8C%E6%97%B6%20grep%20%E6%9F%A5%E6%89%BE%E7%9B%B8%E5%90%8C%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%BD%86%E5%A4%9A%E4%B8%AA%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我有一组需要查看的日志文件,并且我想立即搜索同一文件上的特定字符串这可能吗?目前我正在使用
grep -E 'fatal|error|critical|failure|warning|' /path_to_file
如何使用它并同时搜索多个文件的字符串?如果这是需要编写脚本的事情,有人可以提供一个简单的脚本来执行此操作吗?
答案1
grep -E 'fatal|error|critical|failure|warning|' *.log
答案2
如果更简单,您可以逐个指定每个文件。
grep -E 'fatal|error|critical|failure|warning' file1.log file2.log
答案3
你可以使用这样的东西:
find . -name "*.log" | xargs grep -E 'fatal|error|critical|failure|warning|'
这将找到每个具有.log
扩展名的文件并应用该grep
命令。
答案4
吉加尔·甘地的回答演示星号通配符的使用。还有更多,你可以看到它们这里或者通过运行man 7 glob
.
我发现有用的其中之一是与 . 匹配的范围[]
。由于我工作的系统会生成按顺序编号的日志文件,例如product.log.1
product.log.2
...
product.log.200
,使用单个命令来 grep 3 或 4 个连续文件(但不能更多)是很方便的。所以这
grep 'whatever' product.log.[5-7]
将 grep 查找所有以 Product.log 结尾的文件。 5、6 或 7。通配符不必位于末尾,因此萤火虫的回答可以简化为
grep -E 'fatal|error|critical|failure|warning' file[1,2].log
另请注意,这些通配符也可以在其他命令中使用,例如cp
: