thi đua đuôi với sed


8

Tôi có một hệ thống mini với số lượng chỉ giới hạn ở các mã nhị phân ( bash, cp, cat, sed, ...). Tôi không có taillệnh và tôi tự hỏi liệu tôi có thể mô phỏng chức năng đuôi vớised

cat foo.txt | tail -n 10

Tôi biết rằng tôi có thể in các dòng 1-10 bằng sed cat foo.txt | sed -n '1,10p', nhưng làm cách nào để in 10 dòng cuối cùng?


2
Có nhiều tập lệnh sed hữu ích trong một dòng lệnh mà bạn có thể cần: sed one-line
Slyx

Câu trả lời:


15

Bạn có thể làm một cái gì đó như thế này:

sed -e :a -e '$q;N;11,$D;ba'

sed -e :a -e '$q;N;11,$D;ba' foođể phù hợp với câu hỏi.
Slyx

Tôi không biết làm thế nào nó hoạt động, nhưng nó hoạt động hoàn hảo. Cảm ơn rất nhiều.
Martin Vegter

Ai đó có thể giải thích lệnh tuyệt vời này? Tôi đang tìm kiếm để có một lệnh hiển thị bắt đầu kết thúc một tài liệu và tôi nghĩ rằng lệnh này có thể giúp đỡ, nhưng tôi cần thêm phần đầu. Trên thực tế, lệnh tôi đang tìm kiếm chỉ đơn giản là: sed -e '1,11p' -e :a -e '$q;N;11,$D;ba' Nhưng tôi vẫn muốn hiểu phần đuôi !!!
Franck

0
tac foo |  sed -n '1,10p' | tac

nhưng nếu bạn không có tac, bạn chỉ có thể sử dụng sed theo cách này:

sed -n '1!G;h;$p' foo | sed -n '1,10p' | sed -n '1!G;h;$p'

0

exprsẵn với hệ thống của bạn? Sau đó, bạn có thể thử đánh giá số dòng mong muốn sau khi bạn đã đếm tổng số dòng trong tệp.

Tôi đã tạo một tệp có tên tmpchứa các số từ 1 đến 20 trong mỗi dòng.

nlines=$(cat tmp | sed -n '$=')
cat tmp | sed -n $(expr $nlines - 9),"$nlines"p
11
12
13
14
15
16
17
18
19
20

Tất nhiên, bạn có thể sử dụng wc -l, nếu có sẵn.

Lệnh tính tổng số dòng trong tệp được lấy từ sed one liners . Tuy nhiên, tôi đã không kiểm tra nếu nó cũng hoạt động với các tệp trống.

PS Nếu exprkhông có sẵn, bạn có thể sử dụng các số trừ trong Bash như dưới đây:

cat tmp | sed -n $((nlines-9)),"$nlines"p
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.