Saat mencari jumlah kemunculan string dalam sebuah file, saya biasanya menggunakan:
grep pattern file | wc -l
Namun, ini hanya menemukan satu kemunculan per baris, karena cara kerja grep. Bagaimana saya bisa mencari berapa kali string muncul dalam sebuah file, terlepas dari apakah mereka berada pada baris yang sama atau berbeda?
Juga, bagaimana jika saya mencari pola regex, bukan string sederhana? Bagaimana cara menghitungnya, atau, bahkan lebih baik, mencetak setiap kecocokan pada baris baru?
grep -o foo a.txt b.txt | sort | uniq -c
berfungsi dengan baik (dengan GNU grep): gist.github.com/hudolejev/81a05791f38cbacfd4de3ee3b44eb4f8Coba ini:
Sampel:
sumber
Posting terlambat:
Gunakan pola regex pencarian sebagai Record Separator (RS) di
awk
Ini memungkinkan ekspresi reguler Anda menjangkau
\n
baris-baris yang dibatasi (jika Anda membutuhkannya).sumber
Ripgrep , yang merupakan alternatif cepat untuk grep, baru saja memperkenalkan
--count-matches
bendera yang memungkinkan penghitungan setiap pertandingan di versi 0.9 (Saya menggunakan contoh di atas untuk tetap konsisten):Seperti yang diminta oleh OP, ripgrep memungkinkan pola regex juga (
--regexp <PATTERN>
). Juga dapat mencetak setiap (baris) kecocokan pada baris terpisah:sumber
Retas fungsi warna grep, dan hitung berapa banyak tag warna yang dicetaknya:
sumber