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