findで正規表現を使用する際に問題があります。

findで正規表現を使用する際に問題があります。

find正規表現フラグの使用には多くの問題があります。私は、egrep次のファイルから日付パターンを見つけるために単独で使用しています。

egrep '[0-9]{4}-[0-9]{2}-[0-9]{2}' 

CCYY-MM-DD 形式で日付を返します。を使用して同じパターンを適用しようとしていますfind。試してみました。

find . -regextype egrep -regex "[0-9]{4}-[0-9]{2}-[0-9]{2}"
find . -type f -regex "[0-9]{4}-[0-9]{2}-[0-9]{2}"

中かっこをバックスラッシュしようとしました...

find . -type f -regextype egrep -regex "[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}"

これらのどれも何も返さないようです。エラーメッセージもなく出力もありません...出力をファイルにリダイレクトしようとしましたが、何もありません...

find正規表現の使用に適したリソースを見つけるのは難しいです。誰でも助けることができれば幸いです。私はいかなる種類の正規表現のサポートにも反対しませんが、完全な行ではなく一致するものだけが返されるので、フラグがfind好きです。ただし、実際には、ファイル名が上記のパターンと一致するディレクトリ内のすべてのファイルを見つける必要があります。egrep-ofind

答え1

あなたの例は一重引用符と二重引用符を混在させます。 find はファイル名全体と一致するパターンを想定しているので、「*」でパターンを開始/終了しようとします。

説明するパターンを持つすべてのファイルを探します。

find yourpath -name "*[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]*"

ただし、regextypeを使用するには "posix-egrep"が必要であり、正規表現はフルパスと一致する必要があることに注意してください。

find yourpath -regextype posix-egrep  -regex ".*[0-9]{4}-[0-9]{2}-[0-9]{2}.*"

答え2

最初の例は次のようになります。

find yourpath -name "*[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]*"
                               ^

4番目の括弧が間違っています。

関連情報