A razão pela qual cada linha de cada arquivo foi listada foi devido à substituição de variáveis do seu shell.
Quando você liga
grep -ir "$featuredicon" *
bash avaliará isso. Ele procurará a variável $featuredicon e a colocará em seu comando. Adivinhe qual é o $featuredicon mais provável?
Certo, nada. Então o que você está realmente fazendo é:
grep -ir "" *
E isso corresponde a todas as linhas de todos os arquivos.
Resposta antiga
O cifrão ( $ ) é um marcador para end-of-line na expressão regular (suponho que o mesmo seja verdadeiro para o grep).
Se você quiser procurar por um cifrão, use '\$' .
Certifique-se de verificar a pergunta do StackOverflow: Como grep para o símbolo do dólar ($)?