Anda sudah dekat. Untuk mendapatkan jumlah total semua kemunculan "ha" dalam semua file .txt dalam folder:
grep -o "ha" *.txt | wc -l
Dari man grep
:
-o, --only-matching
Print only the matched (non-empty) parts of a matching line, with
each such part on a separate output line.
Ini berfungsi karena masing-masing kecocokan dicetak pada baris terpisah, sehingga memungkinkan wc -l
untuk menghitung semuanya.
Namun, secara default, grep hanya menemukan kejadian pertama pada sebuah baris dan menampilkan seluruh baris. Begitu juga dengan opsi -c
hanya menemukan kemunculan pertama di semua baris, lalu menampilkan berapa banyak baris yang memiliki 1 (atau lebih) kecocokan.
EDIT:
Berikut adalah cara untuk mencetak jumlah kemunculan dalam setiap file individual (dengan nama file):
find *.txt -printf 'echo "$(grep -o "ha" %p | wc -l) %p";' | sh
#Example output
3 file1.txt
1 file2.txt
Penjelasan:
find *.txt
- menemukan file .txt
-printf
- mencetak semuanya antara tanda kutip tunggal (diformat) ke keluaran standar, menggantikan kemunculan %p
dengan keluaran find (nama file)
$(grep -o "ha" %p | wc -l)
- berfungsi seperti di atas
| sh
- keluaran dari -printf
(yang merupakan perintah) disalurkan ke shell dan dieksekusi
Perhatikan bahwa printf dipanggil sekali per nama file.
Alih-alih menggunakan grep
, coba gunakan ag -c ha
SilverSearcher:
1.txt:3
2.txt:1
Ini lebih cepat! Jika Anda menggunakan ubuntu, Anda dapat menginstal paket silversearcher-ag
.