kepala; kepala
{ head -n[num] >/dev/null
head -n[num]
} <infile >outfile
Dengan di atas, Anda dapat menentukan jumlah baris pertama yang akan dilepas dari kepala keluaran dengan headperintah pertama , dan jumlah baris yang akan ditulis outfiledengan yang kedua. Biasanya juga akan melakukan ini lebih cepat daripada sed- terutama ketika input besar - meskipun membutuhkan dua doa. Mana sedpasti harus lebih disukai meskipun, adalah dalam hal <infileini tidak biasa, lseekable berkas - karena ini biasanya akan tidak bekerja sebagaimana dimaksud dalam kasus itu, namun seddapat menangani semua modifikasi output dalam proses tunggal, scripted.
Dengan GNU headAnda bisa menggunakan -formulir negatif untuk [num]di perintah kedua juga. Dalam hal ini perintah berikut akan menghapus baris pertama dan terakhir dari input:
{ head -n1 >/dev/null
head -n-1
} <infile >outfile
ATAU dengan POSIX sed:
Katakan, misalnya, saya membaca input 20 baris dan saya ingin menghapus 3 dan 7 yang terakhir. Jika saya memutuskan untuk melakukannya dengan sed, saya akan melakukannya dengan buffer ekor. Pertama-tama saya akan menambahkan tiga dan tujuh untuk jumlah total strip dan kemudian melakukan:
seq 20 | sed -ne:n -e '3d;N;1,10bn' -eP\;D
Itu adalah contoh yang menghapus 3 baris pertama dan 7 baris terakhir dari input. Idenya adalah bahwa Anda dapat menyangga sebanyak mungkin garis yang ingin Anda lepas dari ujung input di ruang pola pada tumpukan tetapi hanya Pmemotong yang pertama untuk setiap baris yang ditarik.
- Pada baris
1,10 sed Ptidak ada apapun karena untuk masing-masing input susun dalam ruang pola garis-demi-baris dalam bloop peternakan.
- Pada baris ke-3 semua
sedtumpukan ddihapus - dan sehingga 3 baris pertama dilepaskan dari output dalam satu gerakan.
- Ketika
sedmencapai $baris input terakhir dan mencoba menarik Next, hits EOF dan berhenti memproses seluruhnya. Tetapi pada saat itu, ruang pola mengandung semua garis 14,20- tidak ada yang belum Pdirusak, dan tidak pernah ada.
- Pada setiap baris lainnya,
sed Pjalankan hanya hingga baris pertama yang terjadi \ndi ruang pola, dan Dhapus yang sama sebelum memulai siklus baru dengan apa yang tersisa - atau 6 baris input berikutnya. Baris ke-7 ditambahkan lagi ke stack dengan Nperintah ext dalam siklus baru.
Jadi, dari seqoutput (yaitu 20 baris bernomor berurutan) , sedhanya mencetak:
4
5
6
7
8
9
10
11
12
13
Ini menjadi bermasalah ketika jumlah garis yang ingin Anda lepas dari buntut input besar - karena sedkinerja berbanding lurus dengan ukuran ruang pola. Namun, tetap saja, ini adalah solusi yang layak dalam banyak kasus - dan POSIX menentukan sedruang pola untuk menangani setidaknya 4kb sebelum penghancuran.