Причина, по которой каждая строка каждого файла была указана в списке, была вызвана подстановкой переменной вашей оболочки.
Когда вы звоните
grep -ir "$featuredicon" *
bash оценит это. Он найдет переменную $featuredicon и поместит ее в вашу команду. Угадайте, что, скорее всего, $featuredicon ?
Хорошо, ничего. Итак, что вы на самом деле делаете:
grep -ir "" *
И это соответствует каждой строке каждого файла.
Старый ответ
Знак доллара ($) является заполнителем для end-of-line в регулярном выражении (я предполагаю, что то же самое верно для grep).
Если вы хотите найти знак доллара, используйте '\$' .
Не забудьте проверить вопрос StackOverflow: как получить символ доллара ($)?