Grep is so greedy.

echo "hello joe" | grep "h.*o" --only-matching
hello jo

To get around it, you have to use extended regular expressions.

echo "hello joe" | grep -E "h.*?o" --only-matching
hello