正規表現量指定子を使用したコマンドの検索(例:{1,2})


13

1〜99の数字で終わるすべてのファイルを検索するが、他のすべてを除外する検索コマンド文字列を作成しようとしています。

例えば私が見つけたいmyfile1 myfile99なくmyfile456ないmyfilebackup

私が考えている正規表現myfile[1-9]{1,2}はありますが、これをfindで動作させることはできません。

find . -regex '.*myfile[0-9]{1,2}' または find . -iname 'myfile[0-9]{1,2}'

私が見ることができるのは、機能{1,2}していない部分です。

(ちなみに-name -regex交換可能に使用できますか?)

任意の助けに感謝します。


1
-iname(および-nameglobsを使用します。この構文はありません。
l0b0

回答:


10

試すことができます

find . -regex '.*myfile[0-9][0-9]?'

または

find . \( -name "myfile[0-9][0-9]" -o -name "myfile[0-9]" \)

ありがとう-最初の行は私のために働いています。-inameでこれを試しましたが、構文をサポートしていないと思います。
Lukas88

17

GNU findがある場合は、別の正規表現タイプを使用できます。

find . -regextype sed -regex '.*myfile[0-9]\{1,2\}'

GNUによると、デフォルトでfind去勢された Emacs正規表現構文を使用します-Emacsは\{from,to\}構文をサポートしていますが、少なくともGNU findはサポートしていません。

奇妙なことに、リファレンスマニュアルにはsed正規表現の構文に関するセクションが含まれていないため、だれがサポートされているのかを知っています。


1
sedlike はのedエイリアスのようであるためposix-basic、POSIX BREと互換性があります(ただし、などの拡張機能をサポートしています\+)。sedたとえば[\n]、バックスラッシュの代わりに改行に一致するかn、POSIXで必要とされるGNUとは互換性がありません。-regextype posix-extendedPOSIX ERE も参照してください(so .*myfile[0-9]{1,2})、\sまたは\<
ください-StéphaneChazelas

-regextypeについて知らなかった。使用-regextype egrepすると、バックスラッシュを回避できるように思えます。
Sridhar Sarnobat
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.