Самый простой grepкод, который будет работать:
grep -xE '([^,]*,){10}[^,]*'
Объяснение:
-xгарантирует, что шаблон должен соответствовать всей строке, а не только ее части. Это важно, чтобы вы не сопоставляли строки с более чем 10 запятыми.
-E означает «расширенное регулярное выражение», что позволяет избежать экранирования обратной косой черты в вашем регулярном выражении.
Круглые скобки используются для группировки, а {10}впоследствии означает, что в параграфах должно быть ровно десять совпадений в строке шаблона.
[^,]это символ класса, например, [c-f]будет соответствовать любому символу , который является c, d, eили f, и [^A-Z]будет соответствовать любому символу , который не является прописной буквой. Так что [^,]соответствует любому отдельному символу, кроме запятой.
Класс *символов после означает «ноль или более из них».
Таким образом, часть регулярного выражения ([^,]*,)означает «Любой символ, кроме запятой любое количество раз (включая ноль раз), за которым следует запятая», и {10}указывает 10 из них. Затем, [^,]*чтобы сопоставить остальные символы без запятой до конца строки.
sedздесь) только на одно совпадение больше, чем ищется, хотя этот вопрос делает. Вы не должны были закрывать это.