O código grep mais simples que funcionará:
grep -xE '([^,]*,){10}[^,]*'
Explicação:
-x garante que o padrão deve corresponder à linha inteira , em vez de apenas parte dela. Isso é importante para que você não corresponda a linhas com mais de 10 vírgulas.
-E significa "regex estendido", o que reduz o escape de contrabarra na sua regex.
Os parênteses são usados para agrupamento, e o {10} significa que deve haver exatamente dez correspondências em uma linha do padrão dentro das parênteses.
[^,] é uma classe de caractere - por exemplo, [c-f] corresponderia a qualquer caractere único que fosse c , d , e ou f e [^A-Z] correspondessem qualquer caractere único que NÃO seja uma letra maiúscula. Portanto, [^,] corresponde a qualquer caractere único, exceto uma vírgula.
O * após a classe de caracteres significa "zero ou mais desses".
Portanto, a parte regex ([^,]*,) significa "Qualquer caractere, exceto uma vírgula qualquer número de vezes (incluindo zero vezes), seguido por uma vírgula" e o {10} especifica 10 desses. Então, [^,]* para corresponder ao resto dos caracteres não-vírgula até o final da linha.