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を同じ意味で使用できますか?)

何か助けていただければ幸いです。

コメント

  • -iname(および-name)はグロブを使用します。この構文はありません。

回答

試してみてください

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 like edposix-basicのエイリアスのようですので、POSIX BREと互換性があるはずです(ただし、一部の正規表現をサポートしています\+のような緊張。 'はGNU sedと互換性がありません。たとえば、[\n]は代わりに改行に一致しますPOSIXで必要なバックスラッシュまたはn。 POSIXEREの-regextype posix-extended(つまり、.*myfile[0-9]{1,2})も参照してください。また、\s\<
  • -regextypeについて知りませんでした。 -regextype egrepを使用すると、バックスラッシュを回避できるようです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です