sed yang lucu &sederhana dan tac solusi :
n=4
tac file.txt | sed "1,$n{d}" | tac
CATATAN
- kutip ganda
"diperlukan untuk shell untuk mengevaluasi$nvariabel disedmemerintah. Dalam tanda kutip tunggal, interpolasi tidak akan dilakukan. tacadalahcatterbalik, lihatman 1 tac{}disedapakah ada untuk memisahkan$n&d(jika tidak, shell mencoba menginterpolasi$ndyang tidak ada variabel)
Dari sed one-liners:
# delete the last 10 lines of a file
sed -e :a -e '$d;N;2,10ba' -e 'P;D' # method 1
sed -n -e :a -e '1,10!{P;N;D;};N;ba' # method 2
Tampaknya itulah yang Anda cari.
Saya tidak tahu tentang sed , tetapi dapat dilakukan dengan head :
head -n -2 myfile.txt
Jika hardcoding n adalah opsi, Anda dapat menggunakan panggilan berurutan ke sed. Misalnya, untuk menghapus tiga baris terakhir, hapus tiga baris terakhir tiga kali:
sed '$d' file | sed '$d' | sed '$d'
Apakah benar-benar tidak ada blok I/O asinkron di Linux?
Hapus memori bersama posix saat tidak digunakan?