如何grep两个文件,但排除其他文件

yae*_*ael 0 grep bash rhel shell-script regular-expression

我们想通过 grep 搜索两个文件的字符串:

这些文件是

/confluent/logs/server.log
/confluent/logs/server.log.1
Run Code Online (Sandbox Code Playgroud)

但我们不想将其他文件匹配为

/confluent/logs/server.log.2
/confluent/logs/server.log.3 
Run Code Online (Sandbox Code Playgroud)

等等

所以改为做双 grep 作为

grep log.retention.bytes  /confluent/logs/server.log
grep log.retention.bytes  /confluent/logs/server.log.1
Run Code Online (Sandbox Code Playgroud)

我们想同时找到log.retention.bytes 两个文件的匹配项

我们尝试做

grep log.retention.bytes   /opt/mcspace/confluent/logs/server.log.*[1]
Run Code Online (Sandbox Code Playgroud)

但这是错误的

Tom*_*ala 9

grep log.retention.bytes server.log{,.1}
Run Code Online (Sandbox Code Playgroud)

为了按时间顺序保留日志条目(附加),您可能需要颠倒文件的顺序:

grep log.retention.bytes server.log{.1,}
Run Code Online (Sandbox Code Playgroud)

这当然相当于:

grep log.retention.bytes server.log.1 server.log
Run Code Online (Sandbox Code Playgroud)

因为大括号扩展是在执行grep命令之前由 shell 完成的。

此外,使用zshshell,您可以轻松地自动搜索与模式匹配最后 N 个文件

grep log.retention.bytes server.log*(Om[-2,-1])
Run Code Online (Sandbox Code Playgroud)

其中Om表示按 mtime 降序排序[-2,-1]获取最后 2 行。如果您想搜索更多文件并且不想手动输入它们,那么这个技巧值得记住。