Linux grep命令混乱

问题描述:

我对grep有一个非常基本的困惑。假设我有一个下列文件到grep中:Linux grep命令混乱

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

现在,如果我用下面的表达式

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

用grep我得到的线:

Article is good 

但是,如果我这样做:

grep -P "is*g" test.txt 

我没有得到任何事情。我的问题是,因为asterix(*)是一个通配符,表示前一个字符的0个或更多个重复,所以grep的输出不应该是相同的。为什么零次或多次重复的's'没有给出任何输出?

我在这里错过了什么。谢谢您的帮助!

因为您的输入中没有任何内容匹配i,因此s的值为0或更多,然后g。 “Article is good”无法匹配,因为它在s之后有一个空格,而不是g。模式is\s*g匹配,因为\s是一种与任何类型的空白相匹配的特殊模式 - 所以总体模式是is,然后是任意数量的空格,然后g,它自然匹配“is g”。

+0

哦......是的,我现在明白了。谢谢。 – Richeek 2012-01-07 01:21:00

+0

s *意思是0或更多的重复s不是空间,因此它不会匹配空间! – Richeek 2012-01-07 01:24:31

我看不出有什么igisgissgissssg在你输入...

因为我不知道你想匹配的内容,这是我最好的猜测:

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

是的,我感到困惑。现在我明白了。 – Richeek 2012-01-07 01:21:55

您应该看到正则表达式首先你使用grep之前,还你会发现它有用与其他命令... http://www.regular-expressions.info/

这是0或以前的正则表达式原子更多的重复,而原子是\s 。所以\s*可以匹配tab-space-tab-space-space。