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
-o
find
答え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番目の括弧が間違っています。