Saya punya banyak file log. Saya perlu mencari tahu berapa kali sebuah string muncul di semua file.
grep -c string *
kembali
...
file1:1
file2:0
file3:0
...
Menggunakan pipa saya hanya bisa mendapatkan file yang memiliki satu atau lebih kejadian:
grep -c string * | grep -v :0
...
file4:5
file5:1
file6:2
...
Bagaimana saya bisa mendapatkan hanya jumlah gabungan? (Jika kembali file4:5, file5:1, file6:2
, saya ingin kembali 8.)
grep file1 file2 --options
Jawaban:
sumber
grep -c string<*
Jadi hanya mengganti ruang dengan kurang dari.grep -o
danwc -l
memang. kucing lebih cepat dalam kasus-kasus seperti pertanyaan aslinya.Ini berfungsi untuk beberapa kejadian per baris:
sumber
grep -o string * --exclude-dir=some/dir/one/ --exclude-dir=some/dir/two | wc -l
.grep -ioR string * | wc -l
adalah apa yang saya gunakan untuk melakukan pencarian case-insensitive, recursive, only-matchinggrep -rc test . | awk -F: '$NF > 0 {x+=$NF; $NF=""; print} END{print "Total:",x}'
akan menghitung banyak kemunculan dalam satu baris
sumber
grep -oh "... my that curry was strong" * >> wc
:)Alih-alih menggunakan -c, hanya pipa itu ke wc -l.
Ini akan membuat daftar setiap kemunculan pada satu baris dan kemudian menghitung jumlah baris.
Ini akan melewatkan contoh di mana string muncul 2+ kali pada satu baris.
sumber
Salah satu aplikasi langka yang bermanfaat
cat
.sumber
Sesuatu yang berbeda dari semua jawaban sebelumnya:
sumber
Anda dapat menambahkan
-R
untuk mencari secara rekursif (dan menghindari menggunakan cat) dan-I
mengabaikan file biner.sumber
Solusi AWK wajib:
Berhati-hatilah jika nama file Anda menyertakan ":".
sumber
Solusi AWK yang juga menangani nama file termasuk titik dua:
Perlu diingat bahwa metode ini masih tidak menemukan banyak kemunculan
string
pada baris yang sama.sumber
Jika Anda ingin jumlah kemunculan per file (contoh untuk string "tcp"):
Contoh output:
Penjelasan:
grep -RIci NEEDLE .
- mencari string NEEDLE secara rekursif dari direktori saat ini (mengikuti symlink), mengabaikan binari, menghitung jumlah kemunculan, mengabaikan caseawk ...
- perintah ini mengabaikan file dengan nol kejadian dan memformat garissort -hr
- mengurutkan garis dalam urutan terbalik dengan angka di kolom pertamaTentu saja, ia bekerja dengan perintah grep lainnya dengan opsi
-c
(hitung) juga. Sebagai contoh:sumber
Anda dapat menggunakan yang sederhana
grep
untuk menangkap jumlah kejadian secara efektif. Saya akan menggunakan-i
opsi untuk memastikanSTRING/StrING/string
ditangkap dengan benar.Baris perintah yang memberi nama file:
Baris perintah yang menghapus nama file dan mencetak 0 jika ada file tanpa kejadian:
sumber
varian rekursif pendek :
sumber
Satu-satunya solusi Grep yang saya uji dengan grep for windows:
Solusi ini akan menghitung semua kemunculan walaupun ada banyak yang terjadi pada satu baris.
-r
pencarian direktori secara rekursif,-o
akan "hanya menampilkan bagian dari garis POLA yang cocok" - inilah yang membagi banyak kejadian pada satu baris dan membuat mencetak grep setiap pertandingan pada baris baru; kemudian pipa hasil yang dipisahkan baris baru ke grep dengan-c
untuk menghitung jumlah kejadian menggunakan pola yang sama.sumber
Ini adalah cara alternatif AWK yang lebih cepat daripada grep dalam melakukan ini, yang menangani beberapa kecocokan
<url>
per baris, dalam kumpulan file XML dalam direktori:Ini bekerja dengan baik dalam kasus di mana beberapa file XML tidak memiliki jeda baris.
sumber
Oneliner lain menggunakan fungsi baris perintah dasar yang menangani beberapa kejadian per baris.
sumber