プロが教えるわが家の防犯対策術!

Linux環境で、findコマンドを使用して、末尾に8桁の数字があるファイルを抽出したいのですが、
以下のように正規表現を使用しても、上手くマッチしません。

find -regex ".*\d{8}"

どこに問題があるか、わかる方教えていただけないでしょうか。

A 回答 (2件)

正規表現には、いろんな流儀があります。


ある流儀の表現が、他では使えなかったり意味が違ったりします。
使いたいツールがどんな正規表現に対応しているか、確認してから使うようにしましょう。


man find
https://linuxjm.osdn.jp/html/GNU_findutils/man1/ …
> -regex pattern
> find が理解する正規表現は、デフォルトでは Emacs の正規表現だが、 これは -regextype オプションで変更することができる。

regextypeの設定
https://www.gnu.org/software/findutils/manual/ht …

説明を読むと次のことがわかります。
・\d について、記述がない、つまり \d は 数字にマッチしない
・{}は回数にならない。
※ -regextype egrep等には {} または \{\}についての記述がありますが、emacsの説明にはありません。
本家のEmacsでは\{\}で回数指定ができますが、findのEmacs互換正規表現では対応していないようです。

対処方は
・\d ではなく [0-9]にする
・このままにするなら [0-9]を8回書く
 または。-regextypeで{}が使える種類に変える
・判定はパスに対して行われるので、ファイル名だけにマッチさせたいのなら、そのように記述する。
 .*だと数字9文字とかもマッチする
    • good
    • 1
この回答へのお礼

助かりました

コマンド毎に色々ルールがあるんですね、知りませんでした。知識不足で申し訳ありません。
ご丁寧に教えていただいてありがとうございます!
regextypeを使用したら上手くいきました!
ありがとうございました!

お礼日時:2019/11/05 10:25

こんにちは



Linux環境はわかりませんが、一般的な正規表現から考えると
・末尾に限定されてはいない
・8桁以上あればヒットする

となっているので、現状は「文字列のどこかに8桁以上の数字の連続があればヒットする」という正規表現になっているように思います。
    • good
    • 0
この回答へのお礼

ありがとう

回答ありがとうございます!
末尾に限定されてはいないですが、findの結果が何も出力されないので、上手く検索できてないんだと思います(~_~;)
別の方の回答で、findコマンドでは通常この正規表現は使用できないことがわかり、解決しました。
ありがとうございました。

お礼日時:2019/11/05 10:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!