正規表現で検索を使用する

正規表現で検索を使用する

find正規表現(macOS 14.4.1、Zsh 5.9)でコマンドを使用する方法を理解しようとしています。

note-red.pngnote-yellow.png、、、(およびその他の色)、、、、folder-red.png(およびその他の色)などのファイルを含むディレクトリがありますが、folder-yellow.pngそのフォルダで次のコマンドを実行すると結果は表示されません。私は何が間違っていましたか?

find -E . -regex '^(note|folder)'
find -E . -regex '^(note|folder).+'

ベストアンサー1

REの構造が間違っています。詳細については、man findMac で以下をご覧ください。

-regex patternファイルのフルパスが正規表現を使用するパターンと一致する場合は真です。というファイルを一致させるには./foo/xyzzy正規表現.*/[xyz]*orを使用できますが、orは.*/foo/.*使用できません。xyzzy/foo/

だからあなたは使用する必要があります-regex '.*/(note|folder)-.*'

EREが有効な状態でシフトを使用する必要があるという要件をすでに確認しているので-E(グループ化構文がからに変更されている\(...\))、(...)OKです。

find -E . -regex '.*/(note|folder)-.*'

note-またはより正確に一致させるには(またはで始まる中間ディレクトリ名と一致しませんfolder-

find -E . -regex '.*/(note|folder)-[^/]*\.png$'

標準テストを使用して両方のパターンを一致させることもできます-name

find . \( -name 'note-*.png' -o -name 'folder-*.png' \)

またはそれを使用しているので、zsh代わりに再帰globを使用してくださいfind

print -rC1 -- **/(note|folder)-*.png(ND)

(また、./パスの接頭辞を避け、ソートされたリストを提供し(修飾子を使用する必要はありませんoN)、隠しファイルスクリプトを簡単に作成できます(修飾子を削除してD)、おそらく速度が遅くなる可能性があります。

おすすめ記事