Des variantes de cette question ont certainement été posées plusieurs fois à différents endroits, mais j'essaie de supprimer les dernières M
lignes d'un fichier sans chance.
La deuxième réponse la plus votée dans cette question recommande de procéder comme suit pour se débarrasser de la dernière ligne d'un fichier:
head -n -1 foo.txt > temp.txt
Cependant, lorsque j'essaye cela dans OSX & Zsh, j'obtiens:
head: illegal line count -- -1
Pourquoi donc? Comment supprimer les M
dernières lignes et les premières N
lignes d'un fichier donné?
head --version
? Quel système utilisez-vous?head --version
renvoie en fait une erreur.Réponses:
Vous pouvez supprimer les 12 premières lignes avec:
(Cela signifie imprimer à partir de la 13e ligne.)
Quelques implémentations de support
head
GNU commehead
:mais ce n'est pas standard.
fonctionnerait sur les systèmes qui ont
tail -r
(voir aussi GNUtac
) mais n'est pas optimal.Où
n
est 1:Vous pouvez également faire:
pour supprimer 2 lignes, mais ce n'est pas optimal.
Tu peux faire:
Mais attention, cela ne fonctionnera pas avec de grandes valeurs de n avec certaines
sed
implémentations.Avec
awk
:Pour supprimer des
m
lignes du début etn
de la fin:la source
sed 'x;1d;$d'
peut également être utilisé pour obtenir les deux dernières lignes. Et avec quelquesN
après1d
pourrait être utilisé pour obtenir un peu plus que cela, bien qu'à ce stade, il n'offre aucun avantage sur laN;P;D
boucle que vous recommandez déjà.m
oun
sont0
. Sinon, ce serait parfait.Vous pouvez utiliser la méthode suivante pour supprimer les N premières lignes et les M dernières lignes.
Avec
N=5
,M=7
et le fichiertest.txt
:La commande imprime toutes les lignes de N + 1 à LastLine-M.
Une autre option consiste à utiliser python:
la source
Vous pouvez supprimer les dernières
M
lignes (ici M = 100) d'un fichier avec:la source