Linux bash中有趣的grep匹配

Linux bash中有趣的grep匹配,linux,bash,Linux,Bash,你能解释一下原因吗 这一个给了$?=一, echo "uus" | grep -w -o [0123456789]\* 这一个给美元0 echo "-uus" | grep -w -o [0123456789]\* 正则表达式可以匹配空字符串。-w标志意味着任何匹配都必须以行首或非单词字符开头,后跟行尾或非单词字符 在uus的情况下,行的开头后面是一个单词字符,因此grep不能将空字符串作为单词匹配。行尾前面有一个单词字符,因此grep不能将空字符串作为单词匹配 在-uus的情况下,行首后跟

你能解释一下原因吗

这一个给了$?=一,

echo "uus" | grep -w -o [0123456789]\*
这一个给美元0

echo "-uus" | grep -w -o [0123456789]\*

正则表达式可以匹配空字符串。-w标志意味着任何匹配都必须以行首或非单词字符开头,后跟行尾或非单词字符

在uus的情况下,行的开头后面是一个单词字符,因此grep不能将空字符串作为单词匹配。行尾前面有一个单词字符,因此grep不能将空字符串作为单词匹配


在-uus的情况下,行首后跟-这是一个非单词字符,因此grep可以将空字符串作为行首和-字符之间的单词进行匹配。

正则表达式可以匹配空字符串。-w标志意味着任何匹配都必须以行首或非单词字符开头,后跟行尾或非单词字符

在uus的情况下,行的开头后面是一个单词字符,因此grep不能将空字符串作为单词匹配。行尾前面有一个单词字符,因此grep不能将空字符串作为单词匹配


在-uus的情况下,行首后跟-这是一个非单词字符,因此grep可以将空字符串作为一个单词匹配到行首和-字符之间。

grep在“-”和“u”之间匹配零长单词。

grep在“-”和“u”之间匹配零长单词。

否,它匹配行首和-,之间的零长度单词。单词匹配后面必须跟一个非单词字符,u是单词字符。不,它匹配的是行首和-,之间的零长度单词。字匹配后必须跟一个非字字符,u是字字符。为什么grep-wo[0]*输出两行输出,而grep-o[0]*成功并输出零行输出?我从两个grep命令中获得零行输出,输入为uus或-uus。grep GNU grep 2.5.1为什么引用正则表达式会像SiegeX指出的那样产生不同?我不明白缺乏引用会有什么不同?你能解释一下吗?正如我在对SiegeX现在删除的答案的评论中所解释的,在正则表达式周围加上引号会使bash将反斜杠传递给grep。如果没有引号,bash会解释并删除反斜杠,而grep从未看到它。我猜你试图在评论中的第二颗星之前添加反斜杠。但是stackoverflow,像bash和grep一样,将反斜杠视为一个特殊字符。你知道反斜杠对grep来说很特别吧?在正则表达式周围加引号会使bash将反斜杠视为不特殊的,对吗?为什么grep-wo[0]*输出两行输出,而grep-o[0]*成功并输出零行输出?我从两个grep命令中获得零行输出,输入为uus或-uus。grep GNU grep 2.5.1为什么引用正则表达式会像SiegeX指出的那样产生不同?我不明白缺乏引用会有什么不同?你能解释一下吗?正如我在对SiegeX现在删除的答案的评论中所解释的,在正则表达式周围加上引号会使bash将反斜杠传递给grep。如果没有引号,bash会解释并删除反斜杠,而grep从未看到它。我猜你试图在评论中的第二颗星之前添加反斜杠。但是stackoverflow,像bash和grep一样,将反斜杠视为一个特殊字符。你知道反斜杠对grep来说很特别吧?在正则表达式周围加引号会使bash将反斜杠视为不特殊的,对吗?