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