Isso tem a ver com o que grep vê versus o que a shell vê. Então, ambos.
Se você quiser ver o que grep vê com várias formas de citar, use, por exemplo:
printf '<%s>\n' G "G" 'G' \G "\G" '\G' \G "\G" '\G'
Isso demonstrará o que o shell faz com os vários tipos de citações.
Se grep vir apenas um G , ele pesquisará (e destacará, com suas configurações) apenas as G correspondentes.
Se grep vir uma única barra invertida seguida por G , ela (na sua implementação e provavelmente em todas as implementações atuais) considerará que a barra invertida remove qualquer significado especial do caractere G . Mas não há nenhum significado especial para G , então o resultado será o mesmo que se você passasse G .
Se grep vir duas barras invertidas, a primeira remove o significado especial da segunda. Então, quando grep vê \G , ele procura por uma barra invertida literal seguida de G . Isso é o que você quer.
Se você usar o -F flag para grep , para procurar uma string fixa, poderá passar apenas \G e obter o mesmo resultado. (Ou seja, se você passar \G para que grep veja \G , o que exigirá que você escape da barra invertida de alguma forma, então o shell não t removê-lo.)