Найпростіший grepкод, який буде працювати:
grep -xE '([^,]*,){10}[^,]*'
Пояснення:
-xгарантує, що візерунок повинен відповідати всій лінії, а не лише її частині. Це важливо, щоб ви не відповідали рядкам із більш ніж 10 комами.
-E означає "розширений регулярний вираз", що дозволяє зменшити кількість відхилень від косої риски у вашому регулярному вираженні.
Для групування використовуються дужки, а {10}згодом означає, що в парантезах повинно бути рівно десять збігів підряд.
[^,]є класом символів - наприклад, [c-f]відповідатиме будь-яким окремим символам, що є a c, a d, an eабо an f, і [^A-Z]відповідатиме будь-якому одному символу, який НЕ є великими літерами. Так [^,]відповідає будь-якому одному символу, крім коми.
Клас *символів після означає "нуль або більше з них".
Отже, частина регулярного вираження ([^,]*,)означає "Будь-який символ, крім коми, будь-яку кількість разів (включаючи нульовий раз) з комою", і {10}вказує 10 з них. Потім [^,]*підберіть решту символів без коми до кінця рядка.
sedробиться тут) лише на більшу кількість збігів, ніж шукали, хоча це питання не відповідає. Ви не мали б цього закривати.