".log.[すべての数字]で終わるすべてのログをキャプチャしようとしています。
だから私はこの構文を作りました。
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
私の文法に問題があるのでしょうか?
ベストアンサー1
-regex
(GNU拡張は他のfind
いくつかの実装でも認識されていますが、かなりの違いがあります。)-path
ワイルドカードの代わりに正規表現を使用することを除いて、同様です。名前だけでなく、完全なファイルパスと一致します。
したがって、.*\.log.*[0-9]
(必須^
ではありませんが$
暗黙的にfind
)一致しますが、キャプチャされた項目も-regex
一致します。./dir/foo.log-3
./foo.logic/file.bz2
.*
ic/file.bz
-name
一致ファイル名前ワイルドカードのみが使用されますが、対応する正規表現はありません。ここでは名前に数字が含まれています。.log
で終わるファイルには正規表現は必要ありません。-name '*.foo*[0-9]'
正規表現を使用して同じことを実行できます。つまり、最後の数字の間の部分に何も含まれないようにして、ファイル名とのみ一致することを-regex '.*\.log[^/]*[0-9]'
確認します。.log
/
特に、一部のBSDまたはGNUで使用する-regex
ために拡張正規表現を有効にする場合は、パターンをさらに指定できます。-E
find
-regextype posix-extended
find
find . -regextype posix-extended -regex '.*\.log([.-][0-9]+)+' # GNU
find -E . -regex '.*\.log([.-][0-9]+)+' # BSD
これは、on.log
の後に1つ以上のものが続くものと.<number>
一致します-<number>
。
-regextype posix-extended
GNUのないfind
正規表現はEmacs正規表現、標準基本正規表現と標準拡張正規表現のいくつかの混合(サポートされていますが、グループ化が代わりに+
使用されます)\(...\)
(...)
標準の基本正規表現である-E
BSD正規表現はありません。find