Bagaimana saya bisa membuang n baris terakhir file dengan filter baris perintah unix?
Itu akan menjadi semacam kebalikan dari tail
: tail
membuang n baris pertama tetapi pipa sisanya melalui, tapi saya ingin perintah untuk mem-pipe semuanya kecuali n baris terakhir.
Sayangnya saya belum menemukan yang seperti itu - head
tidak membantu juga. EDIT : Setidaknya di Solaris tidak perlu argumen negatif.
Pembaruan: Saya sebagian besar tertarik pada solusi yang berfungsi untuk file besar, yaitu file log, di mana Anda mungkin ingin memeriksa apa yang terjadi pada menit terakhir.
Jawaban:
Jika Anda memiliki GNU
head
, Anda dapat menggunakanuntuk mencetak semua kecuali 5 baris terakhir
file.txt
.Jika
head -n
tidak ada argumen negatif, cobalahsumber
file.txt
setidaknya enam baris panjang ...)head
, output kosong dikembalikan, tanpa kesalahan.sumber
Berikut cara sederhana untuk menghapus baris terakhir, yang berfungsi pada BSD, dll.
Ekspresi berbunyi "pada baris terakhir, hapus itu". Baris lain akan dicetak, karena itu adalah
sed
perilaku default.Anda dapat mengaitkannya bersama untuk menghapus beberapa baris
Memang agak berat tangan, memang, tetapi hanya satu pemindaian melalui file.
Anda juga dapat melihat ini, untuk jawaban lebih lanjut: https://stackoverflow.com/questions/13380607/how-to-use-sed-to-remove-last-n-lines-of-a-file
Berikut ini adalah satu-liner yang diadaptasi dari salah satu favorit saya di sana:
Saya senang menguraikan yang satu itu, dan saya harap Anda juga melakukannya (: Ia melakukan buffer
N
line saat memindai, tetapi sebaliknya cukup efisien.sumber
Saya ingin tahu mengapa menurut Anda
head
bukan pilihan:Ini sepertinya sesuai dengan tujuan Anda, menggunakan, misalnya:
sumber
head
. BSDhead
tidak memiliki opsi ini, jadi jawaban ini tidak akan berfungsi pada Solaris atau Unix lain tanpa GNU coreutils. OP secara khusus menandai ini dengan Unix dan Unix-Utils juga.Cara lain untuk melakukannya jika
tail -n
tidak akan menerima argumen negatif adalahIni akan menghapus 5 baris terakhir
sumber