Varian dari pertanyaan ini tentu telah ditanyakan beberapa kali di tempat yang berbeda, tetapi saya mencoba untuk menghapus M
baris terakhir dari file tanpa keberuntungan.
Jawaban terbanyak kedua dalam pertanyaan ini merekomendasikan melakukan yang berikut untuk menyingkirkan baris terakhir dalam file:
head -n -1 foo.txt > temp.txt
Namun, ketika saya mencobanya di OSX & Zsh, saya mendapatkan:
head: illegal line count -- -1
Mengapa demikian? Bagaimana saya bisa menghapus M
terakhir garis dan yang pertama N
baris dari file yang diberikan?
head --version
? Sistem apa yang Anda gunakan?head --version
sebenarnya mengembalikan kesalahan.Jawaban:
Anda dapat menghapus 12 baris pertama dengan:
(Itu berarti mencetak dari garis ke-13.)
Beberapa implementasi dukungan
head
seperti GNUhead
:tapi itu bukan standar.
akan bekerja pada sistem yang memiliki
tail -r
(lihat juga GNUtac
) tetapi kurang optimal.Dimana
n
1:Anda juga dapat melakukan:
untuk menghapus 2 baris, tetapi itu tidak optimal.
Anda dapat melakukan:
Tetapi waspadalah yang tidak akan bekerja dengan nilai n yang besar dengan beberapa
sed
implementasi.Dengan
awk
:Untuk menghapus
m
garis dari awal dann
dari akhir:sumber
sed 'x;1d;$d'
mungkin digunakan untuk mendapatkan dua baris terakhir juga. Dan beberapaN
setelah1d
mungkin dapat digunakan untuk mendapatkan sedikit lebih dari itu, meskipun pada saat itu ia tidak menawarkan keuntungan atasN;P;D
loop yang sudah Anda rekomendasikan.m
ataun
sedang0
. Kalau tidak, itu akan sempurna.Anda dapat menggunakan cara berikut untuk menghapus garis N pertama dan garis M terakhir.
Dengan
N=5
,M=7
dan ajukantest.txt
:Perintah ini mencetak semua baris dari N +1 ke LastLine-M.
Pilihan lain adalah menggunakan python:
sumber
Anda dapat menghapus baris terakhir
M
(di sini M = 100) dari file dengan:sumber