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.