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)
但这是错误的
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 行。如果您想搜索更多文件并且不想手动输入它们,那么这个技巧值得记住。