O grep
código 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 combine as linhas com mais de 10 vírgulas.
-E
significa "regex estendido", o que reduz o escape da barra invertida no seu regex.
Os parênteses são usados para agrupar e, {10}
posteriormente, significa que deve haver exatamente dez correspondências em uma linha do padrão entre parênteses.
[^,]
é uma classe de caracteres - por exemplo, [c-f]
corresponderia a qualquer caractere único a c
, a d
, an e
ou an f
e [^A-Z]
corresponderia a qualquer caractere único que NÃO seja uma letra maiúscula. Portanto, [^,]
corresponde a qualquer caractere, exceto uma vírgula.
A *
classe após o caractere significa "zero ou mais destes".
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 {10}
especifica 10 deles. Em seguida, [^,]*
para corresponder o restante dos caracteres que não são vírgulas até o final da linha.
sed
é o caso aqui) apenas na medida em que mais uma correspondência do que a esperada, embora essa pergunta exija. Você não deveria ter fechado isso.