Cách đếm tất cả các trận đấu của một chuỗi với grep cho Linux

[ad_1]

grep là một tiện ích tìm kiếm văn bản có thể hoạt động với đầu vào tiêu chuẩn hoặc nhiều tệp cùng một lúc. Nó được sử dụng để in ra các kết quả phù hợp cho các mẫu, chuỗi hoặc biểu thức chính quy. Nó thường hữu ích để có thể đếm số lượng trận đấu, grep có thể làm khá dễ dàng.

Đếm các trận đấu với grep

Các grep lệnh có -c lá cờ, sẽ đếm số dòng được so khớp và in ra một số. Điều này hữu ích cho nhiều thứ, chẳng hạn như tìm kiếm thông qua các tệp nhật ký để biết số lượng mục nhập từ IP hạt, điểm cuối hoặc từ định danh khác.

grep -c "1.2.3.4" /var/log/nginx/access.log

1.JiBnMqyl6S

Tuy nhiên, grep có thể so khớp nhiều lần trên mỗi dòng. Nếu bạn sử dụng -o lá cờ, grep sẽ in ra một dòng mới cho mỗi trận đấu. Điều này không hoạt động với -c cờ, vì nó sẽ chỉ tính kết quả phù hợp dòngkhông phải nhiều kết quả phù hợp trên mỗi dòng.

Một giải pháp tốt hơn là sử dụng wc (đếm từ) tiện ích với -l (dòng) tham số, sẽ đếm số dòng thô được chuyển đến nó qua đầu vào tiêu chuẩn. Sử dụng wc -l là giải pháp ưa thích vì nó hoạt động với -o để đếm số lần xuất hiện của chuỗi hoặc mẫu đã cho trên toàn bộ tệp.

grep -o "foo" file | wc -l

1.JiBnMqyl6S

Đếm trên nhiều tệp

Một tính năng hay của grep là khả năng xử lý nhiều tệp cùng một lúc, hoặc được chuyển qua xargs, tham số hoặc được cung cấp cùng với mở rộng ký tự đại diện. Khi xử lý nhiều tệp, grep sẽ in ra tên tệp trước trận đấu. Khi đang sử dụng -c để đếm số dòng phù hợp, nó cũng sẽ in ra các tên tệp:

grep "foo" ./*.txt -cH

1.JiBnMqyl6S

Bạn nên luôn sử dụng -H gắn cờ khi làm việc với khả năng có nhiều tệp, vì nó sẽ luôn in tên tệp ngay cả khi chỉ có một tệp được chuyển đến grep. Điều này sẽ ngăn quá trình tự động hóa bị phá vỡ nếu bạn phụ thuộc vào tên tệp ở đó.

Nếu bạn muốn sử dụng -o để đếm nhiều kết quả phù hợp trên mỗi dòng và chuyển đầu ra cho wc -lbạn sẽ không may có khả năng xem các số cho từng tệp riêng lẻ như với -c. Tuy nhiên, với một chút tập lệnh, bạn có thể cắt bớt cột đầu tiên với cutvà đếm số lần xuất hiện duy nhất cho mỗi tên tệp với uniq -c:

grep "foo" ./*.txt -o | cut -d ':' -f 1 | uniq -c

1.JiBnMqyl6S

CÓ LIÊN QUAN: Cách giải nén và sắp xếp các cột ra khỏi tệp nhật ký trên Linux



[ad_2]

Đánh giá dịch vụ post
Chat Zalo
0903064855