我在学习grep
atm,但我很难理解kleene明星元字符的工作。手册页描述*
匹配零个或多个前一个字符。我使用一个名为test
文件,内容如下grep:克莱恩明星(*)应该什么时候匹配?
*a
123ab
1234
abcdef
a?
?
grep 'a*' test
应该匹配零次或多个出现a
和解释打印出test
文件输出的每一行。 该文件进一步描述为了匹配像*
这样的元字符,它们必须通过在前面加上反斜杠\
而被转义。 但grep '*' test
和grep '\*' test
的输出是相同的。输出:*a
为什么*
与之前没有\
?
我相信'* a'不是一个有效的grep模式(因为它是一个无效的正则表达式)。 grep如何处理可能“未定义的行为”和实现可能会做他们想要的(并且逐字处理最初的'*'是明智的) –
但是'grep'\ *'test'完全匹配它。 。 –
由于'\ * a'是一个有效的正则表达式 –