macOSターミナルで正規表現を使って検索する

macOSターミナルで正規表現を使って検索する

さまざまな画像ファイル名のバリエーションを含むフォルダーを検索しようとしています:

1_2-300x224.jpg
1_2-600x449.jpg
1_2-600x600.jpg
1_2-768x575.jpg
1_2-802x600.jpg
1_2.jpg

計画は、2〜4桁の数字+「x」+2〜4桁の数字で終わるファイルを見つけて削除することです。この一致は正規表現式を使用します.*(\d{2,4}x\d{2,4}).jpg(この式は を除くすべてを強調表示します1_2.jpg)。

ただし、実行してもfind . -name ".*(\d{2,4}x\d{2,4}).jpg"結果は返されません。

困惑してしまいました!

答え1

ここで問題がいくつかあります。まず、John が述べたように、-nameはグロブによる部分文字列マッチングを行うため、 を使用する必要があります-regex。次に、正規表現方言の非互換性があります。デフォルトでは、GNU find は Emacs 正規表現を使用し、BSD find は posix 基本正規表現を使用します。find.infoインストールしている場合は、こちらで詳細を読むことができます。

info find.info 'Reference' 'Regular Expressions' 'emacs regular expression'

サポートされている正規表現の方言については、以下を参照してください。

info find.info 'Reference' 'Regular Expressions'

ここ:

* findutils-default regular expression syntax::
* emacs regular expression syntax::
* gnu-awk regular expression syntax::
* grep regular expression syntax::
* posix-awk regular expression syntax::
* awk regular expression syntax::
* posix-basic regular expression syntax::
* posix-egrep regular expression syntax::
* egrep regular expression syntax::
* posix-extended regular expression syntax::

GNU検索

posix-extendedGNU find を使用すると、次のように式を機能させることができます。

find . -regextype posix-extended -regex '.*[0-9]{2,4}x[0-9]{2,4}.jpg'

出力:

./1_2-600x600.jpg
./1_2-802x600.jpg
./1_2-600x449.jpg
./1_2-300x224.jpg
./1_2-768x575.jpg

BSD検索

BSD find にアクセスできませんが、これは機能するはずです:

find -E . -regex '.*[0-9]{2,4}x[0-9]{2,4}\.jpg'

関連情報