hitung jumlah baris dalam output terminal

265

tidak dapat menemukan ini di SO. Saya menjalankan perintah berikut di terminal:

>> grep -Rl "curl" ./

dan ini menampilkan daftar file tempat curl kata kunci. Saya ingin menghitung jumlah file. Cara pertama yang bisa saya pikirkan, adalah menghitung jumlah garis dalam output yang datang di terminal. Bagaimana saya bisa melakukan itu?

roopunk
sumber
40
grep sendiri juga memiliki -cflag yang baru saja mengembalikan hitungan
EaterOfCode

Jawaban:

476

Pipa hasil wcmenggunakan sakelar -l( jumlah baris ):

grep -Rl "curl" ./ | wc -l
João Silva
sumber
1
Saya telah menggunakan grep "" -ctetapi ini jauh lebih baik :)
ninhenzo64
3
Perlu dicatat bahwa trik pemipaan ke wc ini akan bekerja untuk semua output, bukan hanya output grep. Sebagai contoh, dapat dikombinasikan dengan git diff.
Jason L.
1
Mengapa ini jawaban yang diterima? Seperti beberapa komentar yang disebutkan fungsi build in grep -charus digunakan alih-alih menyalurkan output ke program lain. Misalnya Anda bahkan tidak akan mengubah karakter dalam dokumen Word Anda dengan editor teks lain daripada Word, bukan?
Michael P
57

Menempatkan komentar EaterOfCode di sini sebagai jawaban.

grep sendiri juga memiliki flag -c yang hanya mengembalikan hitungan

Jadi perintah dan output bisa terlihat seperti ini.

$ grep -Rl "curl" ./ -c
24

EDIT:

Meskipun jawaban ini mungkin lebih pendek dan dengan demikian mungkin tampak lebih baik daripada jawaban yang diterima (yaitu menggunakan wc). Saya tidak setuju dengan ini lagi. Saya merasa seperti mengingat bahwa Anda dapat menghitung garis dengan memipis wc -ljauh lebih berguna karena Anda dapat menggunakannya dengan program lain grepjuga.

JelteF
sumber
5

Perpipaan ke 'wc' bisa lebih baik JIKA baris terakhir berakhir dengan baris baru (saya tahu bahwa dalam kasus ini, itu akan)
Namun, jika baris terakhir tidak berakhir dengan baris baru 'wc-l' mengembalikan hasil yang salah.

Sebagai contoh:

$ echo "asd" | wc -l

Akan kembali 1dan

$ echo -n "asd" | wc -l

Akan kembali 0


Jadi yang sering saya gunakan adalah grep <anything> -c

$ echo "asd" | grep "^.*$" -c
1

$ echo -n "asd" | grep "^.*$" -c
1

Ini lebih dekat dengan kenyataan daripada apa yang wc -lakan kembali.

GCS
sumber