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 head
perintah pertama , dan jumlah baris yang akan ditulis outfile
dengan yang kedua. Biasanya juga akan melakukan ini lebih cepat daripada sed
- terutama ketika input besar - meskipun membutuhkan dua doa. Mana sed
pasti harus lebih disukai meskipun, adalah dalam hal <infile
ini tidak biasa, lseekable berkas - karena ini biasanya akan tidak bekerja sebagaimana dimaksud dalam kasus itu, namun sed
dapat menangani semua modifikasi output dalam proses tunggal, scripted.
Dengan GNU head
Anda 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 P
memotong yang pertama untuk setiap baris yang ditarik.
- Pada baris
1,10
sed
P
tidak ada apapun karena untuk masing-masing input susun dalam ruang pola garis-demi-baris dalam b
loop peternakan.
- Pada baris ke-3 semua
sed
tumpukan d
dihapus - dan sehingga 3 baris pertama dilepaskan dari output dalam satu gerakan.
- Ketika
sed
mencapai $
baris input terakhir dan mencoba menarik N
ext, hits EOF dan berhenti memproses seluruhnya. Tetapi pada saat itu, ruang pola mengandung semua garis 14,20
- tidak ada yang belum P
dirusak, dan tidak pernah ada.
- Pada setiap baris lainnya,
sed
P
jalankan hanya hingga baris pertama yang terjadi \n
di ruang pola, dan D
hapus yang sama sebelum memulai siklus baru dengan apa yang tersisa - atau 6 baris input berikutnya. Baris ke-7 ditambahkan lagi ke stack dengan N
perintah ext dalam siklus baru.
Jadi, dari seq
output (yaitu 20 baris bernomor berurutan) , sed
hanya 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 sed
kinerja berbanding lurus dengan ukuran ruang pola. Namun, tetap saja, ini adalah solusi yang layak dalam banyak kasus - dan POSIX menentukan sed
ruang pola untuk menangani setidaknya 4kb sebelum penghancuran.