正規表現検索を正しく使用するには?

正規表現検索を正しく使用するには?

オプションを使用してfindの正しい使い方を知ることはできません-regex

たとえば、次の例があります。

Morcheeba/Big Calm/02 Shoulder Holster.flac
Morcheeba/Big Calm/02. Shoulder Holster.flac

path/to/file/## filename.extドットなしで形式の文字列を一致させたい。

私は以前試しました:

find Morcheeba/ -regextype egrep -iregex ".*[0-9]{2}*[a-z]*flac$"

そして、いくつかのバリエーションがありますが、常にすべてのファイルを取得したり、まったく取得したりするわけではありません。

何が問題なの?

よろしくお願いします。

答え1

-regex/(GNU拡張子)は、ファイル名だけでなくフルパスの標準-iregex一致と同じように機能します。-path

そのファイルを探したい場合名前(大)2つの10進数で始まり、その後に10進数以外の数字が来てから終わる場合は、以下を.flacポータブルで実行できます。

find . -name '[0-9][0-9][!0-9]*.[fF][lL][aA][cC]'

一致するものがない01.flacため、一致しません。[!0-9]代わりに、次のように書くことができます。

find . -name '[0-9][0-9][!0-9]*' -name '*.[fF][lL][aA][cC]'

正規表現の代わりにワイルドカードパターンを使用します。

GNUを使用するにfind-iregex

find . -regextype egrep -iregex '.*/[0-9]{2}[^0-9/][^/]*\.flac'
find . -regextype egrep -iregex '.*/[0-9]{2}([^0-9/][^/]*)?\.flac'

つまり、正規表現の残りの部分が拡張されないようにするため、2つの数字を最初に固定します/

答え2

@steeldriverが提案したように、正規表現は.*[0-9]{2}[^.]*\.flac正しく機能します。

関連情報