Çalışacak en basit grep
kod:
grep -xE '([^,]*,){10}[^,]*'
Açıklama:
-x
kalıbın bir parçası olmaktan ziyade tüm çizgiyle eşleşmesi gerekir . Bu önemlidir, bu nedenle 10'dan fazla virgül içeren satırlarla eşleşmezsiniz.
-E
"genişletilmiş normal ifade" anlamına gelir, bu da normal ifadenizde daha az ters eğik çizgi oluşmasını sağlar.
Parantezler gruplama için kullanılır ve daha {10}
sonra parantezler içinde desenin bir satırında tam olarak on eşleşme olması gerektiği anlamına gelir.
[^,]
bir karakter sınıfıdır; örneğin, [c-f]
a c
, a d
, a e
veya an f
olan [^A-Z]
herhangi bir tek karakterle eşleşir ve büyük harf OLMAYAN tek bir karakterle eşleşir. Yani [^,]
virgül hariç herhangi bir karakterle eşleşir.
*
Karakter sınıfı araçlarının sonra "sıfır veya bunların daha fazlası."
Yani normal ifade kısmı ([^,]*,)
"virgül hariç herhangi bir karakter (sıfır kez dahil) ve ardından virgül gelir" anlamına gelir ve bunların {10}
10'unu belirtir. Ardından [^,]*
, virgül olmayan karakterlerin geri kalanını satırın sonuna eşleştirmek için.
sed
burada olduğu gibi ) sadece arandığından daha fazla eşleşmeyi gerektirmez, ancak bu soru. Bunu kapatmamalıydın.