Xóa các dòng sau trận đấu đầu tiên

Dec 31 2020

Tôi cần xóa tất cả các dòng sau dòng đầu tiên chứa từ "cáo"

Nói ví dụ cho tệp đầu vào sau "in.txt"

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

Kết quả sẽ là

The quick
brown fox jumps

Tôi thích một tập lệnh được tạo bằng awk hoặc sed nhưng bất kỳ công cụ dòng lệnh nào khác đều tốt, như perl hoặc php hoặc python, v.v.

Đối với mục đích tìm kiếm, tôi sẽ thêm dòng này:

Loại bỏ các dòng sau khi xuất hiện

Chỉnh sửa sau:

Tôi đang sử dụng các công cụ gnuwin32 trong Windows và giải pháp tôi có thể tìm thấy là:

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

Tuy nhiên, tôi đang tìm kiếm một giải pháp ngắn hơn và có thể di chuyển (giải pháp này chứa lệnh cụ thể của Windows "set / p"

Các câu hỏi tương tự:

  • Làm cách nào để xóa tất cả các dòng sau lần xuất hiện cuối cùng của mẫu?

  • Làm thế nào để xóa các dòng trước khi một trận đấu duy trì nó?

  • Xóa tất cả các dòng trước khi khớp với sed

  • Làm cách nào để xóa các dòng bắt đầu từ dòng đầu tiên cho đến dòng trước khi gặp mẫu '[ERROR] -17-12-2015 "bằng cách sử dụng sed?

  • Làm cách nào để xóa tất cả các dòng trước lần xuất hiện đầu tiên và sau lần xuất hiện cuối cùng của một chuỗi?

Trả lời

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

Với GNU sed:

sed '0,/fox/!d' file

hoặc là

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