กำลังลบช่วงของ n บรรทัดก่อนและหลังบรรทัดที่ตรงกันหรือไม่


12

ฉันมีไฟล์การกำหนดค่าซ้ำและฉันต้องการจับคู่ regex และลบช่วงของเส้นก่อนและหลังการแข่งขัน ฉันต้องการลบการจับคู่ในคำสั่งเดียว

ฉันสามารถใช้...

:g/match/-1d

... หลายครั้งที่จะลบมากกว่าหนึ่งบรรทัดจากก่อนการแข่งขัน ...

... และรวมเข้ากับการโทรสองสามครั้งเพื่อ ...

:g/match/+1d

... เพื่อลบมากกว่าหนึ่งบรรทัดหลังการแข่งขัน ...

แต่มีวิธีใดในการลบช่วงของเส้นก่อนหลังและรวมการจับคู่กับคำสั่งเดียว?

คำตอบ:


21

คุณเกือบจะถึงแล้ว คุณยังสามารถระบุช่วงของเส้นซึ่งอยู่ในรูปของ[line1],[line2][command]แทนที่จะเป็นเพียง[line][command](เช่นคุณกำลังใช้ตอนนี้)

คุณสามารถใช้.เพื่ออ้างถึงบรรทัดปัจจุบัน

  • สำหรับบรรทัดปัจจุบันและถัดไป: :g/match/.,+1d
  • สำหรับบรรทัดปัจจุบันและก่อนหน้า: :g/match/-1,.d
  • สำหรับบรรทัดก่อนหน้าปัจจุบันและถัดไป: :g/match/-1,+1d

ดู:help [range]ข้อมูลเพิ่มเติมและในคำตอบนี้มีตัวอย่างอีกไม่กี่


ไวยากรณ์เหมือนกันใน sed หรือไม่
leeand00

3
@ leeand00 ไม่ทั้งหมดที่:gทำคือเรียกใช้คำสั่ง ex บนบรรทัดที่ตรงกับรูปแบบ ดังนั้นการพิมพ์:g/match/.,+1dจะเหมือนกับทุกบรรทัดด้วยmatchและการพิมพ์:.,+1d
Martin Tournoij

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