1
[USERNAME@host ~] echo -e 'prdxxx\ndadxxx' | grep "da*xxx"
prdxxx
dadxxx
[USERNAME@host ~] echo $SHELL
/bin/bash
[USERNAME@host ~] dpkg -l | grep -iw bash
ii  bash                                    4.1-2ubuntu3                                    The GNU Bourne Again SHell
ii  bash-completion                         1:1.1-3ubuntu2                                  programmable completion for the bash shell
[USERNAME@host ~] 

Why does da*xxx find prdxxx too? It doesn't contains da... did I found a grep bug? or is this a feature?

gasko peter
  • 5,514

2 Answers2

10

It is working fine as per the meaning of the '*'.

* -> 0 or more occurences of prev character.

Since you are checking for a*, this will match 0 or more a's. This means da*xxx can match dxxx, daxxx, daaxxx, daaaxxx, and so on.

Guru
  • 5,905
4

There is a difference between normal shell file name patterns (called glob) where * matches any number of unknown characters, and regular expressions that are used for example by grep, where * stands for zero or more occurences of the previous pattern (this is the character a in your example).

jofel
  • 26,758