meniru ekor dengan sed


8

Saya memiliki mini-sistem dengan jumlah terbatas dari binari ( bash, cp, cat, sed, ...). Saya tidak punya tailperintah, dan saya ingin tahu apakah saya bisa meniru fungsi ekorsed

cat foo.txt | tail -n 10

Saya tahu bahwa saya dapat mencetak baris 1-10 dengan sed cat foo.txt | sed -n '1,10p', tetapi bagaimana saya akan mencetak 10 baris terakhir?


2
Ada banyak skrip sed yang berguna dalam satu baris perintah yang mungkin Anda perlukan: sed satu baris
Slyx

Jawaban:


15

Anda dapat melakukan sesuatu seperti ini:

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

sed -e :a -e '$q;N;11,$D;ba' foountuk mencocokkan pertanyaan.
Slyx

Saya tidak tahu cara kerjanya, tetapi bekerja dengan sempurna. Terima kasih banyak.
Martin Vegter

Bisakah seseorang menjelaskan perintah yang luar biasa ini? Saya mencari satu perintah yang menunjukkan awal dan akhir dokumen, dan saya pikir perintah ini dapat membantu, tetapi saya perlu menambahkan bagian kepala. Sebenarnya, perintah yang saya cari hanyalah: sed -e '1,11p' -e :a -e '$q;N;11,$D;ba' Tapi saya masih ingin memahami bagian ekornya !!!
Franck

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

tetapi jika Anda tidak memiliki tac, Anda hanya dapat menggunakan cara ini:

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

0

Apakah exprtersedia dengan sistem Anda? Kemudian Anda dapat mencoba mengevaluasi nomor baris yang diinginkan setelah Anda menghitung jumlah total baris dalam file.

Saya membuat file dengan nama yang tmpberisi angka dari 1 hingga 20 di setiap baris.

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

Tentu saja, Anda dapat menggunakan wc -l, jika tersedia.

Perintah untuk menghitung jumlah total baris dalam file diambil dari sed one liners . Namun, saya belum memeriksa apakah itu berfungsi dengan file kosong juga.

PS Jika exprtidak tersedia, Anda dapat menggunakan angka kurang di Bash seperti yang ditunjukkan di bawah ini:

cat tmp | sed -n $((nlines-9)),"$nlines"p
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.