O motivo é que *
é um caractere especial em expressões regulares e significa
%código%. Você tem que escapar zero or more preceding characters
para significar um
literal *
character com *
. Então, nos seus exemplos:
\
procuraria por uma string que comece com grep -ir "Settings*xml"
e depois
zero ou mais Setting
caracteres e s
no final. Não existe tal
string no seu arquivo porque xml
é sempre precedido por xml
. E isso:
.
procuraria por uma string que comece com grep -ir "Settings*.xml"
e depois
zero ou mais Setting
e s
após zero ou mais .xml
letras.
Seu primeiro regex corresponderia a algo assim:
s