UNIX でのこれら 2 つのワイルドカードの使用法について、私はいつも混乱しています。アスタリスクは正規表現の量指定子としてのみ使用できることを理解していますが、UNIX ではコマンド*
のような場合に許可されますが、ls
コマンドでgrep
は量指定子としてのみ使用する必要があります。これらのどれを使用するかをガイドするルールはありますか?
質問する
3442 次
1 に答える
10
UNIX の 2 種類のパターン、グロブ(ワイルドカード) と正規表現について話しています。
グロブは通常、ファイル名を照合するときに使用されます。シェルは、コマンド引数で自動的にワイルドカード展開を行います。これは、次のように書くことができます
ls *foo*
文字列 を含むすべてのファイルを一覧表示しますfoo
。グロブは非常に単純です ( を無視しextglob
ます): 構文は通常*
(任意の文字) と?
(任意の 1 文字) のみをサポートします。シェルの自動展開により、これらはどこでも使用でき、不要な一致を避けるために明示的に抑制しなければなりません (たとえば、パターン内でgrep '.*foo.*'
展開を避けるように書くなど)。*
一方、テキストのパターンマッチに使用される正規表現があります。通常、これらは のような特定のユーティリティで使用され、grep
これらのパターンsed
をperl
理解しますが、一部のシェルには正規表現を取るコンテキストがあります (例: Bash の${x/pat/sub}
)。正規表現構文ははるかに強力であるため、一連のテキストを調べて特定のパターンを見つけるのに理想的です。
于 2013-03-10T12:53:39.330 に答える