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