2012-01-07 13 views
1

grepに関する非常に基本的な混乱があります。今、私は次の式Linux grepコマンドの混乱

grep -P "is\s*g" test.txt 

でgrepする場合、私はラインを取得

test.txt: 
This is an article 
from some newspaper 
Article is good 
newspaper is not. 

:私はこれを行う場合は

Article is good 

を私はgrepするには、次のファイルがあるとし

grep -P "is*g" test.txt 

もの。私の質問は、アスタリスク(*)は前の文字の0回以上の繰り返しを表すワイルドカードなので、grepの出力は同じではないはずです。 's'の0回以上の繰り返しが何の出力も与えていないのはなぜですか?

私はここで何が欠けていますか?助けてくれてありがとう!

答えて

8

入力にiに一致するものはないので、0回以上の繰り返しがsの場合はgとなります。 「Article is good」はgではなく、sの後ろに空白があるため一致しません。 is\s*gは一致します。\sは、あらゆる種類の空白にマッチする特別なパターンです。つまり、全体のパターンはisです。次に、任意の量のスペースがあります。gは "is g"です。

+0

ああ...はい、私は今それを得た。ありがとう。 – Richeek

+0

*は0回以上のスペースの繰り返しを意味しないので、スペースにマッチしません!! – Richeek

3

私はあなたが一致したかったのか分からないので、ここでは私の最高の推測で何igisgissg、あなたの入力でissssg ...

を見ない:

grep -P "is.*g" test.txt 
+0

うん、私は混乱してしまった。今分かります。 – Richeek

0

...また、あなたはそれが他のコマンドと便利でしょう、最初の正規表現が表示されるはずです。したがって、\s*は、タブスペースタブスペーススペースと一致することができます。