Bash

如何grep這兩個文件,但排除其他文件

  • July 20, 2020

我們想通過 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命令之前完成的。

此外,使用zshshell,您可以輕鬆地自動查找與模式匹配的最後 N 個文件

grep log.retention.bytes server.log*(Om[-2,-1])

其中Om表示按 mtime 降序排序[-2,-1]獲取最後 2 行。如果您希望搜尋更多文件並且不想手動鍵入它們,那麼這個技巧值得記住。

引用自:https://unix.stackexchange.com/questions/599401