「検索」名パターンの圧縮

「検索」名パターンの圧縮

使っています

find . -name '*.[cCHh][cC]' -exec grep -nHr "$1" {} ';'
find . -name '*.[cCHh]' -exec grep -nHr "$1" {} ';'

.c、.C、.h、.H、.cc、および.CCで終わるすべてのサブディレクトリにリストされているすべてのファイルから文字列を取得します。しかし、これには2つのコマンドが含まれているため、非効率的だと感じます。

1つの正規表現を使用して.c、.C、.h、.H、.cc、および.CCファイルを含む正規表現を作成するにはどうすればよいですか?

編集:私はこれをLinuxマシンのbashで実行しています。

ベストアンサー1

トピックで述べたように(無効なシェルモードを使用している)正規表現を使用する必要があります。

find . -iregex '.*\.[ch]+'

上記の方法は、.ch、.hhなどのファイルがある場合にそれらを見つけるための怠惰なアプローチです。正確なマッチングを行うには、まだ必要なものを列挙する必要がありますが、正規表現を使用する方が簡単です。

find . -regex '.*\.\(c\|C\|cc\|CC\|h\|H\)'

おすすめ記事