Najprostszy grep
kod, który będzie działał:
grep -xE '([^,]*,){10}[^,]*'
Wyjaśnienie:
-x
zapewnia, że wzór musi pasować do całej linii, a nie tylko jej części. Jest to ważne, aby nie dopasowywać wierszy zawierających więcej niż 10 przecinków.
-E
oznacza „rozszerzone wyrażenie regularne”, co powoduje, że w wyrażeniu regularnym występuje mniej ucieczki odwrotnego ukośnika.
Nawiasy są używane do grupowania, a {10}
następnie oznacza, że musi być dokładnie dziesięć dopasowań w rzędzie wzorca w nawiasach.
[^,]
jest klasą znaków - na przykład [c-f]
pasuje do każdego pojedynczego znaku, który jest a c
, a d
, e
lub an f
, i [^A-Z]
pasuje do każdego pojedynczego znaku, który NIE jest wielką literą. [^,]
Dopasowuje więc dowolny pojedynczy znak oprócz przecinka.
Klasa *
po znaku oznacza „zero lub więcej z nich”.
Zatem część wyrażenia regularnego ([^,]*,)
oznacza „Dowolny znak oprócz przecinka dowolną liczbę razy (w tym zero razy), po którym następuje przecinek” i {10}
określa 10 z nich. Następnie [^,]*
dopasuj resztę znaków niebędących przecinkami do końca wiersza.
sed
tutaj) tylko jednego pasowania więcej niż jest to poszukiwane, choć pytanie to robi. Nie powinieneś tego zamykać.