grep
не знает имя файла, поэтому вы видите только совпадающие строки, но не знаете, из какого файла они исходили. Я бы в вашем случае написал явное l oop:
for file in *.fit
do
if titleline=$(dfits $file|grep MSBTITLE)
then
echo $file : $titleline
fi
done
Поскольку dfits
уже скрывает имя файла в его выводе, мы сохраняем вывод из grep в переменную, и если есть соответствовать, выведите эту строку вместе с именем файла.