grep
Mã đơn giản nhất sẽ hoạt động:
grep -xE '([^,]*,){10}[^,]*'
Giải trình:
-x
đảm bảo rằng mẫu phải phù hợp với toàn bộ dòng, thay vì chỉ là một phần của nó. Điều này rất quan trọng để bạn không khớp các dòng có hơn 10 dấu phẩy.
-E
có nghĩa là "regex mở rộng", giúp thoát khỏi dấu gạch chéo ngược trong regex của bạn.
Dấu ngoặc đơn được sử dụng để nhóm và {10}
sau đó có nghĩa là phải có chính xác mười kết quả khớp trong một hàng của mẫu trong các dấu ngoặc.
[^,]
là một lớp nhân vật, ví dụ, [c-f]
sẽ khớp với bất kỳ ký tự đơn nào là a c
, a d
, an e
hoặc an f
và [^A-Z]
sẽ khớp với bất kỳ ký tự đơn nào KHÔNG phải là chữ cái viết hoa. Vì vậy, [^,]
phù hợp với bất kỳ nhân vật duy nhất ngoại trừ một dấu phẩy.
Lớp *
sau ký tự có nghĩa là "không hoặc nhiều trong số này."
Vì vậy, phần regex ([^,]*,)
có nghĩa là "Bất kỳ ký tự nào ngoại trừ dấu phẩy bất kỳ số lần (bao gồm 0 lần), theo sau là dấu phẩy" và {10}
chỉ định 10 trong số này. Sau đó, [^,]*
để phù hợp với phần còn lại của các ký tự không dấu phẩy cho đến cuối dòng.
sed
ở đây) chỉ bằng một trận đấu nhiều hơn so với tìm kiếm, mặc dù câu hỏi này có. Bạn không nên đóng cái này.