Le grepcode le plus simple qui fonctionnera:
grep -xE '([^,]*,){10}[^,]*'
Explication:
-xgarantit que le motif doit correspondre à la ligne entière , plutôt qu'à une partie seulement. Ceci est important pour ne pas faire correspondre les lignes avec plus de 10 virgules.
-E signifie "regex étendu", ce qui permet de réduire l'échappement anti-slash dans votre regex.
Les parenthèses sont utilisées pour le regroupement, ce qui {10}signifie par la suite qu'il doit y avoir exactement dix correspondances dans une rangée du motif dans les parenthèses.
[^,]est une classe de caractères — par exemple, [c-f]correspondrait à n'importe quel caractère unique qui est a c, a d, an eou an f, et [^A-Z]correspondrait à tout caractère unique qui n'est PAS une lettre majuscule. Correspond donc à [^,]n'importe quel caractère, à l'exception d'une virgule.
L' *après la classe de caractères signifie «zéro ou plusieurs d'entre eux».
Ainsi, la partie regex ([^,]*,)signifie "N'importe quel caractère sauf une virgule un certain nombre de fois (y compris zéro fois), suivi d'une virgule" et le {10}spécifie 10 d'entre eux. Ensuite, [^,]*pour faire correspondre le reste des caractères non virgule à la fin de la ligne.
sedcas ici) seulement jusqu'à une correspondance de plus que ce qui est recherché, bien que cette question le fasse. Vous ne devriez pas avoir fermé cela.