ฉันจะจัดรูปแบบเอาต์พุต grep ของฉันเพื่อแสดงหมายเลขบรรทัดที่ท้ายบรรทัดและจำนวน Hit ได้อย่างไร


378

ฉันกำลังใช้ grep เพื่อจับคู่สตริงในไฟล์ นี่คือไฟล์ตัวอย่าง:

example one,
example two null,
example three,
example four null,

grep -i null myfile.txt ผลตอบแทน

example two null,
example four null,

ฉันจะคืนบรรทัดที่ตรงกันพร้อมกับหมายเลขบรรทัดของพวกเขาเช่นนี้ได้อย่างไร:

  example two null, - Line number : 2
  example four null, - Line number : 4
  Total null count : 2

ฉันรู้ - c ส่งคืนบรรทัดที่จับคู่ทั้งหมด แต่ฉันไม่จัดรูปแบบให้ถูกต้องเพื่อเพิ่มtotal null countไว้ด้านหน้าและฉันไม่รู้วิธีเพิ่มหมายเลขบรรทัด

ฉันควรทำอย่างไร

คำตอบ:


600

-n ส่งคืนหมายเลขบรรทัด

-iสำหรับกรณีที่ไม่สนใจ ใช้เฉพาะในกรณีที่ไม่จำเป็นต้องใช้การจับคู่

$ grep -in null myfile.txt

2:example two null,
4:example four null,

รวมกับawkเพื่อพิมพ์หมายเลขบรรทัดหลังการแข่งขัน:

$ grep -in null myfile.txt | awk -F: '{print $2" - Line number : "$1}'

example two null, - Line number : 2
example four null, - Line number : 4

ใช้การทดแทนคำสั่งเพื่อพิมพ์จำนวน null ทั้งหมด:

$ echo "Total null count :" $(grep -ic null myfile.txt)

Total null count : 2

ฉันสามารถจัดรูปแบบนี้โดยการเพิ่มหมายเลขบรรทัดหลังจากแทนก่อนหน้าด้วย:
ลอนดอน

วิธีการแก้ปัญหาของคุณดูเหมือนดี แต่ได้รับข้อผิดพลาดawk95: syntax error at source line context is >>> ' <<< missing } awk95: bailing out at source line 1
ลอนดอน

ขออภัยเปลี่ยนเป็น linux แล้วตอนนี้มันใช้งานได้ดี :) มันเป็น windows version ไม่ค่อยดี
London

1
... อัศวินผู้ที่กล่าว-niว่าคุณจำเคล็ดลับนี้ได้อย่างไร
santiago arizti

59

ใช้หรือ-n--line-number

ตรวจสอบman grepตัวเลือกเพิ่มเติมมากมาย


3
ผู้ใช้ linux ใหม่ขี้เกียจอ่าน man page แต่ถ้าพวกเขาใช้ลินุกซ์มากพอพวกเขาจะคุ้นเคยกับมัน :) มันมีประโยชน์มาก :)
Dzung Nguyen

19
ไม่ขี้เกียจเสมอไป (แต่บางครั้ง) บ่อยครั้งที่ผู้ใช้ Linux ใหม่มีปัญหาในการทำความเข้าใจกับหน้าคน (พวกเขาสามารถดูเป็นความลับ)
TecBrat

บางครั้ง man page อาจมีหลายหน้า และนี่เป็นเรื่องยากที่จะอ่านทั้งหมด
Eugen Konkov

7

ใช้grep -n -i null myfile.txtเพื่อส่งออกหมายเลขบรรทัดที่ด้านหน้าของการแข่งขันแต่ละครั้ง

ฉันไม่คิดว่า grep มีสวิตช์ในการพิมพ์จำนวนบรรทัดทั้งหมดที่จับคู่ แต่คุณสามารถไปที่เอาต์พุตของ grep เป็น wc เพื่อทำสิ่งนั้น:

grep -n -i null myfile.txt | wc -l

3
-c จะพิมพ์บรรทัดทั้งหมดที่ตรงกัน
dpatchery

คุณพูดถูก น่าเสียดายที่มันยังหยุดเอาท์พุทปกติ
jhenninger


4

grepค้นหาบรรทัดและส่งออกหมายเลขบรรทัด แต่ไม่อนุญาตให้คุณ "โปรแกรม" สิ่งอื่น ๆ หากคุณต้องการที่จะรวมข้อความโดยพลการและอื่น ๆ "การเขียนโปรแกรม" คุณสามารถใช้ awk

$ awk '/null/{c++;print $0," - Line number: "NR}END{print "Total null count: "c}' file
example two null,  - Line number: 2
example four null,  - Line number: 4
Total null count: 2

หรือใช้เปลือกเท่านั้น (bash / ksh)

c=0
while read -r line
do
  case "$line" in
   *null* )  (
    ((c++))
    echo "$line - Line number $c"
    ;;
  esac
done < "file"
echo "total count: $c"

3

หรือใน perl (เพื่อความสมบูรณ์ ... ):

perl -npe 'chomp; /null/ and print "$_ - Line number : $.\n" and $i++;$_="";END{print "Total null count : $i\n"}'

2

อ้างอิงลิงก์นี้สำหรับคำสั่ง linux linux http://linuxcommand.org/man_pages/grep1.html

สำหรับการแสดงหมายเลขบรรทัดบรรทัดของรหัสและไฟล์ใช้คำสั่งนี้ในเทอร์มินัลหรือ cmd, GitBash (Powered by terminal)

grep -irn "YourStringToBeSearch"

1

แค่คิดว่าฉันจะมีอะไรบางอย่างที่อาจช่วยคุณได้ในอนาคต หากต้องการค้นหาหลาย ๆ สตริงและหมายเลขบรรทัดเอาต์พุตและเรียกดูผ่านเอาต์พุตให้พิมพ์:

egrep -ne 'null|three'

จะแสดง:

2:example two null,  
3:example three,  
4:example four null,   

egrep -ne 'null|three' | less

จะแสดงผลลัพธ์ในเซสชั่นน้อย

HTH มิ.ย.

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