Comment puis-je supprimer les n dernières lignes d'un fichier avec un filtre de ligne de commande Unix?
Ce serait en quelque sorte le contraire de tail
: tail
Ignore les n premières lignes , mais le reste des tuyaux à travers, mais je veux la commande de conduite tout à travers sauf les n dernières lignes.
Malheureusement, je n'ai rien trouvé de tel - ça head
n'aide pas non plus. EDIT : au moins dans Solaris, il ne prend pas d'arguments négatifs.
Mise à jour: je suis surtout intéressé par une solution qui fonctionne pour les gros fichiers, c'est-à-dire les fichiers journaux, où vous voudrez peut-être inspecter ce qui s'est passé au cours des dernières minutes.
Réponses:
Si vous avez GNU
head
, vous pouvez utiliserpour imprimer toutes les lignes sauf les 5 dernières
file.txt
.Si
head -n
ne prend aucun argument négatif, essayezla source
file.txt
au moins six lignes ...)head
, une sortie vide est retournée, sans erreur.la source
Voici un moyen simple de supprimer la dernière ligne, qui fonctionne sur BSD, etc.
L'expression indique "sur la dernière ligne, supprimez-la". Les autres lignes seront imprimées, car il s'agit
sed
du comportement par défaut.Vous pouvez les enchaîner pour supprimer plusieurs lignes
Ce qui est certes un peu lourd, mais ne fait qu'une seule analyse du fichier.
Vous pouvez également y jeter un œil, pour plus de réponses: https://stackoverflow.com/questions/13380607/how-to-use-sed-to-remove-last-n-lines-of-a-file
Voici un one-liner adapté de l'un de mes favoris là-bas:
Je me suis amusé à déchiffrer celui-ci, et j'espère que vous le ferez aussi (: il fait des
N
lignes tampon pendant qu'il scanne, mais sinon c'est assez efficace.la source
Je suis curieux de savoir pourquoi vous pensez que ce
head
n'est pas une option:Cela semble correspondre à votre objectif, en utilisant, par exemple:
la source
head
. BSDhead
n'a pas cette option, donc cette réponse ne fonctionnera pas sur Solaris ou d'autres Unix sans coreutils GNU. L'OP l'a spécifiquement marqué avec Unix et Unix-Utils.Une autre façon de le faire si vous
tail -n
ne prenez pas d'arguments négatifs estCela supprimerait les 5 dernières lignes
la source