*
を使用している間 grep
の0個以上の前の文字を示す 、*。c
を使用します ls
で使用するときにすべてのCファイルを検索する ls * .c
のようなコマンド 。誰かが*
の使用方法を教えてもらえますか これら2つの場合で違いますか?
承認された回答:
シェルファイル名のグロブと正規表現は同じ文字のいくつかを使用し、それらは同様の目的を持っていますが、あなたは正しいです、それらは互換性がありません。ファイル名のグロブは、それほど強力なシステムではありません。
ファイル名のグロビング:
-
*コード> 「0個以上の文字」を意味します
-
?コード> 「任意の1文字」を意味します
ただし、正規表現では、。*
を使用する必要があります 「0個以上の文字」を意味し、。
「任意の1文字」を意味します。 ?コード> 正規表現でまったく異なる何かを意味します:先行するRE要素のゼロまたは1つのインスタンス。
角かっこ( []
)少なくとも単純なケースでは、これを入力しているシステムの両方のシステムで同じように機能するようです。これには、POSIX文字クラス(例: [:alpha:]
)などが含まれます )。とはいえ、コマンドをさまざまな種類のシステムで機能させる必要がある場合は、文字のリストなどの基本的なもの以外のものを使用しないことをお勧めします(例: [abeq]
)および多分文字範囲(例: [a-c]
。
これらの違いは、2つのシステムが単純な場合にのみ直接交換可能であることを意味します。ファイル名の正規表現マッチングが必要な場合は、別の方法で行う必要があります。 find -regex
1つのオプションです。 ( find -name
もあることに注意してください ちなみに、これはglob構文を使用します。)