2016-03-23 8 views
2

私は、ワイルドカード文字の動作は、例えば、同じであるかどうか理解したい:私はls *.xmlを入力すると、それは例えば、.xmlで終わるすべてのファイルを一覧表示し、プロンプトUNIX上)ワイルドカード文字の動作は異なりますか?

1:1.xml, first.xmlなど

- >ように、*は任意の文字に一致します。

2)さて、私は、ファイルにgrepを使用して、いくつかのテキストを検索しようとしていた、と私は以下のコマンドを実行:

grep -i "*.xml" first.txt

私の全く驚いたことにそこには結果がfirst.txtが持っていたにも関わらず、返されませんでした内容は次のとおりです:first.xml,second.xml

私がgrep -i "xml" first.xmlを行うと、結果が得られます。

この動作は混乱の原因となります。*は、ケース(1)とケース(2)のいずれのテキストにも一致していますか?

さまざまな状況でこれが動作しますか、そうであれば、この情報を見つける場所。

+1

が---- 'CuriousMind〜$の男が – user234461

+1

をgrep'はい:)私はもしわからない(実用的な目的のために、あなただけのgrep .xmlまたはコースのgrep '\.xml$'使用します) manページはGlobbingに伝えます。あなたの詳細な応答に感謝します – CuriousMind

答えて

4

シェルはグロビングを使用します。 https://en.wikipedia.org/wiki/Glob_(programming)

Grepは正規表現を使用します。 https://en.wikipedia.org/wiki/Regular_expression

これらは2つの異なる言語であり、grepの場合、*はワイルドカードではありません。それは前の文字は、繰り返しを意味し、ゼロ回以上

あなたが欲しい

意味
grep '.*\.xml' 

任意の文字.)を繰り返し0回以上のリテラルが続く(*)「」 (\.)XML

この情報を見つけるため

+0

あなたのコメントをありがとう。したがって、シェルで使用されるときに「*」と呼ばれる名前をワイルドカード文字で参照しませんか?テキストブックがこの事実を参照しているかどうかはわかりません。 – CuriousMind

+1

シェルでは、ワイルドカード文字です。正規表現(grepを含む)では、それはクレーネの星です。 – user234461

+2

(プログラミングの世界では)正規表現では、「+」や「?」や「{m、n}」とともに「量子化」とも呼ばれます。 –

関連する問題