Você está usando .*
corretamente, mas como você percebeu, está comendo o máximo de caracteres possível em sua correspondência porque .
corresponde a qualquer caractere. Você poderia fazer:
grep -Eo "X([^.]*?)\." inputFile
Isso corresponde a um X seguido por qualquer seqüência de comprimento de qualquer ponto não ( [^.]*
) até algum caractere ( ?
) e um ponto ( \.
). Você diz que está interessado em tudo entre o primeiro X e o primeiro. no entanto, você pode simplificar isso ainda mais:
grep -Eo "X[^.]*\." inputFile