ลบเส้นหลังจากการแข่งขันครั้งแรก
ฉันต้องการลบบรรทัดทั้งหมดหลังจากบรรทัดแรกที่มีคำว่า "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?
จะลบบรรทัดทั้งหมดก่อนสตริงแรกและหลังสุดท้ายที่เกิดขึ้นได้อย่างไร?
คำตอบ
awk '{print} /fox/{exit}' file
ด้วย GNU sed:
sed '0,/fox/!d' file
หรือ
sed -n '0,/fox/p' file