A página grep man explica os dois símbolos:
Anchoring
The caret^and the dollar sign$are meta-characters that respectively match the empty string at the beginning and end of a line.
A pesquisa por ^ corresponde apenas ao início da linha, que todas as linhas possuem, para que todas correspondam. Procurar por uma string vazia não tem restrições, então também combina todas as linhas. A pesquisa por ^$ significa "corresponde ao início da linha seguido do final da linha", que é uma linha em branco. Você também pode usá-los para casos como encontrar todas as linhas que começam com foo ( ^foo ) ou todas as linhas que terminam com bar ( bar$ )