การนับจำนวนการแข่งขันทั้งหมดด้วย grep แทนที่จะเป็นจำนวนการแข่งขันที่ตรงกัน


29

grep เสนอวิธีในการนับจำนวนการแข่งขันทั้งหมดที่มันทำหรือไม่? อ็อพชัน -c ส่งคืนจำนวนบรรทัดที่ตรงกับ regex เท่านั้น แต่ในกรณีนี้ฉันมีการจับคู่หลายรายการต่อบรรทัด

คำตอบ:


29

ลองนี้:

grep -o -E "your expression" file |wc -l

ดี -E เป็นเพียงตัวอย่างมันอาจเป็น -P, -F เป็นต้นจุดคือ -o

ทดสอบ:

kent$  echo "abc xxx yyy"|grep -cP "[a-z]{3}"      
1

kent$  echo "abc xxx yyy"|grep -oP "[a-z]{3}"|wc -l
3

8

มีแฟล็ก -o ซึ่งบ่งชี้ว่าเฉพาะส่วนย่อยที่ตรงกันของบรรทัดเท่านั้นที่ควรถูกพิมพ์

ใช้ร่วมกับ wc -l:

grep -o "part of line" | wc -l

grep คนอธิบายมันเช่นกัน


1

เพื่อเป็นทางเลือกให้กับคำตอบอื่น ๆ โดยใช้เพียง grep:

grep -o "seach pattern" somefile.txt | grep -c ""

-o ใน grep แรกให้ผลลัพธ์แต่ละการแข่งขันและเป็นเพียงการจับคู่ - ไม่ใช่ทั้งบรรทัด (ยกเว้นว่าทั้งคู่เป็นสายการแข่งขันแน่นอน) -c ใน grep ตัวที่สองจากนั้นนับ 'em

มีตัวอักษรให้พิมพ์อีกสองสาม (เช่น 4 หรือ 5) แต่ฉันจำได้ง่ายกว่า

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