Linux

擷取以任意數字結尾的日誌文件

  • September 2, 2018

我們想要擷取所有以“.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-extendedGNU 一起使用find

find . -regextype posix-extended -regex '.*\.log([.-][0-9]+)+' # GNU
find -E . -regex '.*\.log([.-][0-9]+)+' # BSD

這裡匹配 on.log後跟一個或多個.<number>or -<number>

沒有-regextype posix-extendedGNUfind的正則表達式是emacs正則表達式,是標準基本正則表達式和標準擴展正則表達式之間的某種混合(支持+,但分組是 with\(...\)而不是(...))。

沒有-EBSDfind正則表達式是標準的基本正則表達式。

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