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”。
答
我看不出有什么ig
,isg
,issg
,issssg
在你输入...
因为我不知道你想向匹配的内容,这是我最好的猜测:
grep -P "is.*g" test.txt
+0
是的,我感到困惑。现在我明白了。 – Richeek 2012-01-07 01:21:55
答
这是0或以前的正则表达式原子更多的重复,而原子是\s
。所以\s*
可以匹配tab-space-tab-space-space。
哦......是的,我现在明白了。谢谢。 – Richeek 2012-01-07 01:21:00
s *意思是0或更多的重复s不是空间,因此它不会匹配空间! – Richeek 2012-01-07 01:24:31