1〜99の数字で終わるすべてのファイルを検索し、他のすべてのファイルを除外する検索コマンド文字列を作成しようとしています。 。
eg 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
を同じ意味で使用できますか?)
何か助けていただければ幸いです。
コメント
回答
試してみてください
find . -regex ".*myfile[0-9][0-9]?"
または
find . \( -name "myfile[0-9][0-9]" -o -name "myfile[0-9]" \)
コメント
- ありがとうございます-最初の行はworki私のためにng。 -inameを使用してこれを試しましたが、'構文がサポートされているとは思わないか、'何か問題があります。
回答
GNUで検索した場合は、別の正規表現タイプを使用できます。
find . -regextype sed -regex ".*myfile[0-9]\{1,2\}"
GNUによると、find
はニュートラル Emacs正規表現構文はデフォルトで-Emacsは\{from,to\}
構文をサポートしていますが、少なくともGNU find
はサポートしていません。
不思議なことに、リファレンスマニュアルには、sed
正規表現構文のセクションが含まれていないため、誰がその部分を知っていますか。サポートされています。
コメント
-
sed
likeed
はposix-basic
のエイリアスのようですので、POSIX BREと互換性があるはずです(ただし、一部の正規表現をサポートしています\+
のような緊張。 'はGNUsed
と互換性がありません。たとえば、[\n]
は代わりに改行に一致しますPOSIXで必要なバックスラッシュまたはn
。 POSIXEREの-regextype posix-extended
(つまり、.*myfile[0-9]{1,2}
)も参照してください。また、\s
や\<
- -regextypeについて知りませんでした。
-regextype egrep
を使用すると、バックスラッシュを回避できるようです。
-iname
(および-name
)はグロブを使用します。この構文はありません。