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.)