Tôi nghĩ cách tốt nhất là sử dụng grepkết hợp với cutvà tail. Đầu tiên, sử dụng grep để lấy dòng có chuỗi mong muốn ( -nđến số dòng đầu ra; -m 1dừng tìm kiếm sau trận đấu đầu tiên):
grep -n -m 1 "somestring" filename.txt
Điều này xuất ra số dòng và chính chuỗi. Để cắt chuỗi, chúng tôi sử dụng cut ( -f1: trường đầu tiên đầu ra; -d:sử dụng ":" làm dấu phân cách):
grep -n -m 1 "somestring" filename.txt | cut -f1 -d:
Tiếp theo, chúng tôi sử dụng đầu ra của lệnh này làm tham số trong đuôi. Thông thường, đuôi in các dòng k cuối cùng, nhưng bằng cách sử dụng -n +k, chúng ta có đuôi để in từ dòng k trở đi. Tổng lệnh là:
tail -n +`grep -n -m 1 "somestring" filename.txt | cut -f1 -d:` filename.txt
Để đầu ra các dòng cho đến khi somestringsử dụng headthay vì tailvà -n -#thay vì -n +#. Bạn cũng có thể kết hợp cả hai để có được các dòng từ một chuỗi cho đến một chuỗi khác.
awk '/line 2A/,0'và trường hợp thứ hai có thểawk '/line 2A/,/A/&&!/line 2A/'hoặc nếu đó là ít nhất một char trước Aawk '/line 2A/,/[^2]A/'