นับจำนวนบรรทัดในเอาต์พุตเทอร์มินัล


264

ไม่พบสิ่งนี้ใน SO ฉันรันคำสั่งต่อไปนี้ในเทอร์มินัล:

>> grep -Rl "curl" ./

และสิ่งนี้จะแสดงรายการของไฟล์ที่มีคำสำคัญเกิดขึ้น ฉันต้องการนับจำนวนไฟล์ วิธีแรกที่ฉันคิดได้คือการนับจำนวนบรรทัดในเอาต์พุตที่มาในเทอร์มินัล ฉันจะทำสิ่งนั้นได้อย่างไร


40
grep เองมี-cแฟ
ล็ก

ที่เกี่ยวข้อง: unix.stackexchange.com/questions/248245/…
AlikElzin-kilaka

คำตอบ:


475

ไพพ์ผลลัพธ์เพื่อwcใช้สวิตช์-l(การนับบรรทัด ):

grep -Rl "curl" ./ | wc -l

1
ฉันใช้grep "" -cแต่นี่มันดีกว่า :) :)
ninhenzo64

3
ควรสังเกตว่าเคล็ดลับในการวางท่อกับ wc นี้จะใช้ได้กับเอาต์พุตใด ๆ ไม่ใช่แค่เอาต์พุต grep ตัวอย่างเช่นสามารถรวมกับ git diff
Jason L.

1
ทำไมนี่เป็นคำตอบที่ยอมรับได้? ในขณะที่ความคิดเห็นบางส่วนกล่าวถึงการสร้างในฟังก์ชั่นgrep -cควรใช้แทนการไพพ์เอาต์พุตไปยังโปรแกรมอื่น เช่นคุณจะไม่เปลี่ยนอักขระในเอกสาร Word ด้วยโปรแกรมแก้ไขข้อความอื่นนอกเหนือจาก Word ใช่ไหม?
Michael P

57

แสดงความคิดเห็นของ EaterOfCode ที่นี่เป็นคำตอบ

grep เองยังมีแฟล็ก -c ซึ่งเพิ่งส่งกลับจำนวน

ดังนั้นคำสั่งและผลลัพธ์อาจมีลักษณะเช่นนี้

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

แก้ไข:

แม้ว่าคำตอบนี้อาจสั้นกว่าและอาจดูดีกว่าคำตอบที่ยอมรับ (ใช้อยู่wc) ฉันไม่เห็นด้วยกับสิ่งนี้อีกต่อไป ฉันรู้สึกว่าการจดจำว่าคุณสามารถนับจำนวนบรรทัดได้โดยการไพพ์ไปยังwc -lมีประโยชน์มากกว่าที่คุณสามารถใช้กับโปรแกรมอื่น ๆ ได้grepเช่นกัน


5

การไปที่ 'wc' อาจจะดีกว่าหากบรรทัดสุดท้ายลงท้ายด้วยการขึ้นบรรทัดใหม่ (ฉันรู้ว่าในกรณีนี้จะเป็นเช่นนั้น)
อย่างไรก็ตามหากบรรทัดสุดท้ายไม่ลงท้ายด้วยการขึ้นบรรทัดใหม่ 'wc -l' จะให้ผลลัพธ์ที่ผิดกลับมา

ตัวอย่างเช่น:

$ echo "asd" | wc -l

จะกลับมา1และ

$ echo -n "asd" | wc -l

จะกลับมา 0


ดังนั้นสิ่งที่ฉันมักจะใช้คือ grep <anything> -c

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

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

นี่ใกล้เคียงกับความเป็นจริงมากกว่าสิ่งที่wc -lจะกลับมา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.