Linux
擷取以任意數字結尾的日誌文件
我們想要擷取所有以“.log.log”結尾的日誌。
$$ any number $$ 所以我創建了這個語法
find . -type f -regex '^.log.*[0-9]$' -print command does not give any output
但這不會擷取以下文件(預期結果)
controller.log.2018-01-03-01 server.log.2017-10-31-03 server.log.2018-01-23-11 server.log.2018-04-06-17 server.log.2018-07-07-05 controller.log.2018-01-03-02 log-cleaner.log.10 server.log.2017-10-31-04 server.log.2018-01-23-12 server.log.2018-04-06-18 server.log.2018-07-07-06 controller.log.2018-01-03-03 log-cleaner.log.2 server.log.232.434
我的語法有什麼問題?
-regex
(一個 GNU 擴展現在也被其他一些find
實現所辨識,但有很大的不同)就像-path
它使用正則表達式而不是萬用字元。它匹配整個文件路徑,而不僅僅是它的名稱。所以
.*\.log.*[0-9]
(不需要^
或$
順便說一句,它們是隱含的find
’s-regex
)將匹配,但./dir/foo.log-3
也匹配擷取的../foo.logic/file.bz2``.*``ic/file.bz
-name
僅匹配文件名,使用萬用字元但沒有正則表達式對應項。在這裡,對於名稱包含.log
並以數字結尾的文件,您無論如何都不需要正則表達式,-name '*.foo*[0-9]'
.您可以使用 regexp 執行相同的操作
-regex '.*\.log[^/]*[0-9]'
,即確保.log
與最後一個數字之間的部分不包含任何/
內容,因此它僅與文件名匹配。使用
-regex
,您可以進一步指定模式,特別是如果您啟用擴展正則表達式,-E
與某些 BSDfind
或-regextype posix-extended
GNU 一起使用find
。find . -regextype posix-extended -regex '.*\.log([.-][0-9]+)+' # GNU find -E . -regex '.*\.log([.-][0-9]+)+' # BSD
這裡匹配 on
.log
後跟一個或多個.<number>
or-<number>
。沒有
-regextype posix-extended
GNUfind
的正則表達式是emacs正則表達式,是標準基本正則表達式和標準擴展正則表達式之間的某種混合(支持+
,但分組是 with\(...\)
而不是(...)
)。沒有
-E
BSDfind
正則表達式是標準的基本正則表達式。