ลบเส้นหลังจากการแข่งขันครั้งแรก

Dec 31 2020

ฉันต้องการลบบรรทัดทั้งหมดหลังจากบรรทัดแรกที่มีคำว่า "fox"

พูดเช่นสำหรับไฟล์อินพุตต่อไปนี้ "in.txt"

The quick
brown fox jumps
over
the
lazy dog
the second fox
is hunting

ผลลัพธ์จะเป็นอย่างไร

The quick
brown fox jumps

ฉันชอบสคริปต์ที่สร้างใน awk หรือ sed แต่เครื่องมือบรรทัดคำสั่งอื่น ๆ นั้นดีเช่น perl หรือ php หรือ python เป็นต้น

เพื่อจุดประสงค์ในการค้นหาฉันจะเพิ่มบรรทัดนี้:

ลบบรรทัดหลังจากเกิดขึ้น

แก้ไขภายหลัง:

ฉันใช้เครื่องมือ gnuwin32 ใน Windows และวิธีแก้ปัญหาที่ฉันพบคือสิ่งนี้:

grep -m1 -n fox in.txt | cut -f1 -d":" > var.txt
set /p MyNumber=<var.txt
head -%MyNumber% in.txt > out.txt

อย่างไรก็ตามฉันกำลังมองหาวิธีแก้ปัญหาที่สั้นกว่าและพกพาได้ (อันนี้มีคำสั่งเฉพาะของ Windows "set / p"

คำถามที่คล้ายกัน:

  • จะลบเส้นทั้งหมดหลังจากเกิดรูปแบบครั้งสุดท้ายได้อย่างไร?

  • จะลบบรรทัดก่อนที่การแข่งขันจะคงอยู่ได้อย่างไร

  • ลบบรรทัดทั้งหมดก่อนการแข่งขันกับ sed

  • วิธีการลบเส้นเริ่มต้นจากบรรทัดที่ 1 จนถึงบรรทัดก่อนที่จะพบกับรูปแบบ '[ERROR] -17-12-2015' โดยใช้ sed?

  • จะลบบรรทัดทั้งหมดก่อนสตริงแรกและหลังสุดท้ายที่เกิดขึ้นได้อย่างไร?

คำตอบ

3 Cyrus Dec 31 2020 at 03:59
awk '{print} /fox/{exit}' file

ด้วย GNU sed:

sed '0,/fox/!d' file

หรือ

sed -n '0,/fox/p' file