Linux grep命令中的混淆

Linux grep命令中的混淆,grep,Grep,我对格雷普有一个非常基本的困惑。假设我有一个要grep的文件: test.txt: This is an article from some newspaper Article is good newspaper is not. 现在,如果我用下面的表达式grep grep -P "is\s*g" test.txt 我明白了: Article is good 但是,如果我这样做: grep -P "is*g" test.txt 我什么也没得到。我的问题是,因为asterix*是一个通

我对格雷普有一个非常基本的困惑。假设我有一个要grep的文件:

test.txt:
This is an article 
from some newspaper
Article is good 
newspaper is not.
现在,如果我用下面的表达式grep

grep -P "is\s*g" test.txt
我明白了:

Article is good
但是,如果我这样做:

grep -P "is*g" test.txt
我什么也没得到。我的问题是,因为asterix*是一个通配符,表示前一个字符的0个或更多重复,grep的输出不应该相同吗。为什么“s”的零次或多次重复没有产生任何输出

我错过了什么。谢谢你的帮助

我在您的输入中没有看到ig、isg、issg、ISSSG

因为我不知道你想匹配什么,所以这里是我最好的猜测:

grep -P "is.*g" test.txt
我在你的输入中没有看到ig,isg,issg,ISSSG

因为我不知道你想匹配什么,所以这里是我最好的猜测:

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

因为在你的输入中没有匹配i,然后是0或更多的s,然后是g的重复。文章是好的,不能匹配,因为它在s后面有空格,而不是g。模式是\s*g匹配,因为\s是一种特殊的模式,可以匹配任何类型的空白-因此总体模式是,然后是任意大小的空间,然后是g,自然匹配的是g。

,因为您的输入中没有匹配i的内容,然后是0或更多重复的s,然后是g。文章是好的,不能匹配,因为它在s后面有空格,而不是g。模式是\s*g匹配,因为\s是一种特殊的模式,可以匹配任何类型的空格-因此总体模式是,然后是任意大小的空格,然后是g,自然匹配的是g。

在使用grep之前,您应该先查看正则表达式,您还会发现它对其他命令有用

在使用grep之前,您应该先查看正则表达式,而且您会发现它对其他命令也很有用

它是前一个正则表达式原子的0个或更多重复,并且该原子是\s。因此\s*可以匹配制表符空间制表符空间。

它是对上一个正则表达式原子的0次或多次重复,而该原子是\s。所以\s*可以匹配选项卡空间选项卡空间。

Ohh…是的,我现在知道了。谢谢。s*表示0次或多次重复s而不是空格,所以它当然不会匹配空格!!哦……是的,我现在知道了。谢谢。s*表示0次或多次重复s而不是空格,所以它当然不会匹配空格!!是的,我很困惑。现在我明白了。是的,我搞糊涂了。现在我明白了。