J'ai un dossier, foo.txt
contenant les lignes suivantes :
a
b
c
Je veux une commande simple qui donne comme résultat le contenu de foo.txt
être :
a
b
J'ai un dossier, foo.txt
contenant les lignes suivantes :
a
b
c
Je veux une commande simple qui donne comme résultat le contenu de foo.txt
être :
a
b
Utilisation de GNU sed
:
sed -i '$ d' foo.txt
Le site -i
L'option n'existe pas dans les anciennes versions, vous devez donc l'utiliser comme un filtre avec un fichier temporaire :
cp foo.txt foo.txt.tmp
sed '$ d' foo.txt.tmp > foo.txt
rm -f foo.txt.tmp
Bien sûr, dans ce cas, vous pourriez aussi utiliser head -n -1
au lieu de sed
.
C'est de loin la solution la plus rapide et la plus simple, surtout pour les gros fichiers :
head -n -1 foo.txt > temp.txt ; mv temp.txt foo.txt
si vous voulez supprimer la ligne supérieure, utilisez ceci :
tail -n +2 foo.txt
ce qui signifie que les lignes de sortie commencent à la ligne 2.
Ne pas utiliser sed
pour effacer les lignes du haut ou du bas d'un fichier -- c'est très très lent si le fichier est gros.
J'ai eu des difficultés avec toutes les réponses ici parce que je travaillais avec un fichier ENORME (~300Gb) et aucune des solutions n'était adaptée. Voici ma solution :
dd if=/dev/null of=<filename> bs=1 seek=$(echo $(stat --format=%s <filename> ) - $( tail -n1 <filename> | wc -c) | bc )
En d'autres termes : déterminez la longueur du fichier que vous souhaitez obtenir (longueur du fichier moins la longueur de sa dernière ligne) et, à l'aide de dd, définissez cette position comme étant la fin du fichier.
NOTE : Ceci supprime la ligne du fichier en place ! Faites une sauvegarde ou un test sur un fichier factice avant de l'essayer sur votre propre fichier énorme !
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.