0

我想用一个正则表达式简单地从 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]"
4

4 回答 4

2

因为-iname不接受正则表达式,即使接受,你1*也可能不是你想要的。使用-iregex

find -regextype posix-extended -iregex '(.*/)?log4j-cnode1.*\.log\.(1[0-1]|[1-9])'
于 2013-02-20T08:40:23.327 回答
0
find . -iname "log4j-cnode1*\.log\.(1?[0-9])"

您的正则表达式说 1 后跟 0 或 1 后跟 1-9

于 2013-02-20T08:30:07.823 回答
0
$ find -name 'log4j-cnode1*\.log\.[0-9]*'
./log4j-cnode1.log.1
./log4j-cnode1.log.10
./log4j-cnode1.log.11
./log4j-cnode1.log.2
./log4j-cnode1.log.3
./log4j-cnode1.log.4
./log4j-cnode1.log.5
./log4j-cnode1.log.6
./log4j-cnode1.log.7
./log4j-cnode1.log.8
./log4j-cnode1.log.9
于 2013-02-20T08:30:41.253 回答
0

几乎是对的。

-iname但是,使用-iregexwith -regextype egrep(或)代替awk,如下所示:

find . -regextype egrep \
    -iregex ".*log4j-cnode1.*\.log\.(1[0-1]|[1-9])"
于 2013-02-20T08:37:20.153 回答