ไม่พบสิ่งนี้ใน SO ฉันรันคำสั่งต่อไปนี้ในเทอร์มินัล:
>> grep -Rl "curl" ./
และสิ่งนี้จะแสดงรายการของไฟล์ที่มีคำสำคัญเกิดขึ้น ฉันต้องการนับจำนวนไฟล์ วิธีแรกที่ฉันคิดได้คือการนับจำนวนบรรทัดในเอาต์พุตที่มาในเทอร์มินัล ฉันจะทำสิ่งนั้นได้อย่างไร
ไม่พบสิ่งนี้ใน SO ฉันรันคำสั่งต่อไปนี้ในเทอร์มินัล:
>> grep -Rl "curl" ./
และสิ่งนี้จะแสดงรายการของไฟล์ที่มีคำสำคัญเกิดขึ้น ฉันต้องการนับจำนวนไฟล์ วิธีแรกที่ฉันคิดได้คือการนับจำนวนบรรทัดในเอาต์พุตที่มาในเทอร์มินัล ฉันจะทำสิ่งนั้นได้อย่างไร
คำตอบ:
ไพพ์ผลลัพธ์เพื่อwc
ใช้สวิตช์-l
(การนับบรรทัด ):
grep -Rl "curl" ./ | wc -l
grep "" -c
แต่นี่มันดีกว่า :) :)
grep -c
ควรใช้แทนการไพพ์เอาต์พุตไปยังโปรแกรมอื่น เช่นคุณจะไม่เปลี่ยนอักขระในเอกสาร Word ด้วยโปรแกรมแก้ไขข้อความอื่นนอกเหนือจาก Word ใช่ไหม?
แสดงความคิดเห็นของ EaterOfCode ที่นี่เป็นคำตอบ
grep เองยังมีแฟล็ก -c ซึ่งเพิ่งส่งกลับจำนวน
ดังนั้นคำสั่งและผลลัพธ์อาจมีลักษณะเช่นนี้
$ grep -Rl "curl" ./ -c
24
แก้ไข:
แม้ว่าคำตอบนี้อาจสั้นกว่าและอาจดูดีกว่าคำตอบที่ยอมรับ (ใช้อยู่wc
) ฉันไม่เห็นด้วยกับสิ่งนี้อีกต่อไป ฉันรู้สึกว่าการจดจำว่าคุณสามารถนับจำนวนบรรทัดได้โดยการไพพ์ไปยังwc -l
มีประโยชน์มากกว่าที่คุณสามารถใช้กับโปรแกรมอื่น ๆ ได้grep
เช่นกัน
การไปที่ '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
จะกลับมา
-c
แฟ