GNU/Linux >> Belajar Linux >  >> Linux

Menghitung semua kemunculan string dalam semua file dalam folder

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 .


Linux
  1. Cara Menghapus Semua File Dalam Folder Kecuali Satu File Tertentu Di Linux

  2. Hapus Semua File/direktori Kecuali Satu File?

  3. Grep Word Dalam File Lalu Salin File?

  1. Hapus Semua File Dalam Satu Folder Kecuali Yang Terakhir (Terbaru) 20?

  2. Bagaimana Cara Menghapus Semua File Dengan Ekstensi Tertentu Di Folder Tertentu?

  3. tautan simbolik:temukan semua file yang terhubung ke file ini

  1. Temukan semua file dengan nama yang mengandung string

  2. Mencari string di banyak file di Linux

  3. Temukan semua file yang lebih lama dari satu menit