grep เสนอวิธีในการนับจำนวนการแข่งขันทั้งหมดที่มันทำหรือไม่? อ็อพชัน -c ส่งคืนจำนวนบรรทัดที่ตรงกับ regex เท่านั้น แต่ในกรณีนี้ฉันมีการจับคู่หลายรายการต่อบรรทัด
grep เสนอวิธีในการนับจำนวนการแข่งขันทั้งหมดที่มันทำหรือไม่? อ็อพชัน -c ส่งคืนจำนวนบรรทัดที่ตรงกับ regex เท่านั้น แต่ในกรณีนี้ฉันมีการจับคู่หลายรายการต่อบรรทัด
คำตอบ:
ลองนี้:
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
มีแฟล็ก -o ซึ่งบ่งชี้ว่าเฉพาะส่วนย่อยที่ตรงกันของบรรทัดเท่านั้นที่ควรถูกพิมพ์
ใช้ร่วมกับ wc -l:
grep -o "part of line" | wc -l
grep คนอธิบายมันเช่นกัน
เพื่อเป็นทางเลือกให้กับคำตอบอื่น ๆ โดยใช้เพียง grep:
grep -o "seach pattern" somefile.txt | grep -c ""
-o ใน grep แรกให้ผลลัพธ์แต่ละการแข่งขันและเป็นเพียงการจับคู่ - ไม่ใช่ทั้งบรรทัด (ยกเว้นว่าทั้งคู่เป็นสายการแข่งขันแน่นอน) -c ใน grep ตัวที่สองจากนั้นนับ 'em
มีตัวอักษรให้พิมพ์อีกสองสาม (เช่น 4 หรือ 5) แต่ฉันจำได้ง่ายกว่า