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$n
variabel dised
memerintah. Dalam tanda kutip tunggal, interpolasi tidak akan dilakukan. tac
adalahcat
terbalik, lihatman 1 tac
{}
dised
apakah ada untuk memisahkan$n
&d
(jika tidak, shell mencoba menginterpolasi$nd
yang 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?