2013-02-20 73 views
0

我想簡單地取1到日誌文件11個500與一個正則表達式:正則表達式匹配的日誌文件1至11

log4j-cnode1.log.11 
log4j-cnode1.log.10 
log4j-cnode1.log.9 
log4j-cnode1.log.8 
log4j-cnode1.log.7 
log4j-cnode1.log.6 
log4j-cnode1.log.5 
log4j-cnode1.log.4 
log4j-cnode1.log.3 
log4j-cnode1.log.2 
log4j-cnode1.log.1 

,所以我不希望獲取的log4j-cnode1.log.12,log4j的-cnode1.log.13,...,log4j的-cnode1.log.500

我嘗試這個命令:

find . -iname "log4j-cnode1*\.log\.(1[0-1]|[1-9])" 

爲什麼這不是工作?

1至9正常工作與此:

find . -iname "log4j-cnode1*\.log\.[1-9]" 
+0

1至11,對嗎? – 2013-02-20 08:41:00

回答

2

因爲-iname不接受正則表達式,即使它會,你1*很可能不在你想要什麼。使用-iregex

find -regextype posix-extended -iregex '(.*/)?log4j-cnode1.*\.log\.(1[0-1]|[1-9])' 
+0

謝謝!我不知道'find'每個默認都不理解正則表達式。 – basZero 2013-02-20 08:42:51

0
find . -iname "log4j-cnode1*\.log\.(1?[0-9])" 

您正則表達式表示後跟0或1,隨後1-9

+0

這也會顯示12到19,我不想 – basZero 2013-02-20 08:42:04

+0

啊錯過了那部分! – Techmonk 2013-02-20 08:48:33

0

你猜對了幾乎權1。

但是,相反的-iname,使用-iregex-regextype egrep(或awk),像這樣:

find . -regextype egrep \ 
    -iregex ".*log4j-cnode1.*\.log\.(1[0-1]|[1-9])"