El grep
código más simple que funcionará:
grep -xE '([^,]*,){10}[^,]*'
Explicación:
-x
asegura que el patrón debe coincidir con la línea completa , en lugar de solo una parte de ella. Esto es importante para que no coincidan las líneas con más de 10 comas.
-E
significa "expresión regular extendida", lo que hace que se reduzca la barra invertida en su expresión regular.
Los paréntesis se usan para agrupar, y {10}
luego significa que debe haber exactamente diez coincidencias en una fila del patrón dentro de las paréntesis.
[^,]
es una clase de caracteres; por ejemplo, [c-f]
coincidiría con cualquier carácter único que sea a c
, a d
, an e
o an f
, y [^A-Z]
coincidiría con cualquier carácter único que NO sea una letra mayúscula. Por lo tanto, [^,]
coincide con cualquier carácter, excepto una coma.
El *
después de que los medios de clase de caracteres "cero o más de estos."
Entonces, la parte regex ([^,]*,)
significa "Cualquier carácter excepto una coma cualquier número de veces (incluyendo cero veces), seguido de una coma" y {10}
especifica 10 de estos. Luego, [^,]*
para que coincida con el resto de los caracteres que no son comas al final de la línea.
sed
hace aquí) solo hasta una coincidencia más de la que se busca, aunque esta pregunta sí. No deberías haber cerrado esto.