Bash
如何grep這兩個文件,但排除其他文件
我們想通過 grep 搜尋兩個文件的字元串:
這些文件是
/confluent/logs/server.log /confluent/logs/server.log.1
但我們不想將其他文件匹配為
/confluent/logs/server.log.2 /confluent/logs/server.log.3
ETC
所以改為做雙重grep作為
grep log.retention.bytes /confluent/logs/server.log grep log.retention.bytes /confluent/logs/server.log.1
我們想同時找到
log.retention.bytes
兩個文件的匹配項我們嘗試做
grep log.retention.bytes /opt/mcspace/confluent/logs/server.log.*[1]
但這是錯誤的
grep log.retention.bytes server.log{,.1}
為了使日誌條目(附加)按時間順序排列,您可能需要顛倒文件的順序:
grep log.retention.bytes server.log{.1,}
這當然相當於:
grep log.retention.bytes server.log.1 server.log
因為大括號擴展是由 shell 在執行
grep
命令之前完成的。此外,使用
zsh
shell,您可以輕鬆地自動查找與模式匹配的最後 N 個文件:grep log.retention.bytes server.log*(Om[-2,-1])
其中
Om
表示按 mtime 降序排序並[-2,-1]
獲取最後 2 行。如果您希望搜尋更多文件並且不想手動鍵入它們,那麼這個技巧值得記住。