0

1つの正規表現で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に使用-iregexします。-regextype egrepawk

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