วิธี grep และพิมพ์บรรทัด N ถัดไปหลังจากตี?


16

ฉันต้องการ grep สำหรับสิ่งที่เกิดขึ้นในไฟล์ข้อความแล้วพิมพ์บรรทัด N ต่อไปนี้หลังจากที่พบแต่ละครั้ง ความคิดใด ๆ

คำตอบ:


23

Grep มีตัวเลือกต่อไปนี้ซึ่งจะช่วยให้คุณทำสิ่งนี้ได้ คุณอาจต้องการดูหน้า manสำหรับข้อมูลเพิ่มเติม:

  • -A num พิมพ์บรรทัด num ของบริบทการติดตามหลังการแข่งขันแต่ละครั้ง ดูเพิ่มเติมที่ตัวเลือก -B และ -C

  • -B NUM พิมพ์บรรทัด NUM ของบริบทชั้นนำก่อนการแข่งขันแต่ละครั้ง ดูเพิ่มเติมตัวเลือก -A และ -C

  • -C [จำนวน] พิมพ์จำนวนบรรทัดของบริบทนำหน้าและต่อท้ายโดยรอบแต่ละการแข่งขัน ค่าดีฟอลต์คือ 2 และเทียบเท่ากับ -A 2 -B 2 หมายเหตุ: อาจไม่มีการกำหนดช่องว่างระหว่างตัวเลือกและอาร์กิวเมนต์


7

หากคุณมี GNU grepก็เป็นตัวเลือก-A/ มิฉะนั้นคุณสามารถทำมันได้ด้วย--after-contextawk

awk '/regex/ {p = N}
     p > 0   {print $0; p--}' filename

1
awk '/regex/{p=2} p > 0 {print $0; p--}' filename- งานคุณไม่ได้
BladeMight


3

พิมพ์ N บรรทัดหลังบรรทัดที่ตรงกัน

คุณสามารถใช้grepพร้อม-A nตัวเลือกเพื่อพิมพ์ N บรรทัดหลังจากจับคู่บรรทัด

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

$ cat mytext.txt 
  Line1
  Line2
  Line3
  Line4
  Line5
  Line6
  Line7
  Line8
  Line9
  Line10

$ grep -wns Line5 mytext.txt -A 2
5:Line5
6-Line6
7-Line7

ตัวเลือกอื่น ๆ ที่เกี่ยวข้อง:

พิมพ์ N บรรทัดก่อนการจับคู่บรรทัด

ใช้-B nตัวเลือกที่คุณสามารถพิมพ์ N บรรทัดก่อนการจับคู่บรรทัด

$ grep -wns Line5 mytext.txt -B 2
3-Line3
4-Line4
5:Line5

พิมพ์ N บรรทัดก่อนและหลังบรรทัดที่ตรงกัน

การใช้-C nตัวเลือกคุณสามารถพิมพ์ N บรรทัดก่อนและหลังบรรทัดที่ตรงกัน

$ grep -wns Line5 mytext.txt -C 2
3-Line3
4-Line4
5:Line5
6-Line6
7-Line7
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.