J'utilise sed
pour supprimer rapidement les lignes avec une position spécifique comme
sed '1d'
sed '5d'
Mais que se passe-t-il si je veux supprimer la dernière ligne du fichier et que je ne connais pas le nombre de lignes (je sais que je peux l'obtenir en utilisant wc
et plusieurs autres astuces).
Actuellement, utiliser une solution de contournement avec head
et tail
combiné avec wc
pour ce faire. Des rebondissements rapides ici?
in sed $
est la dernière ligne donc pour supprimer la dernière ligne:
sed '$d' <file>
$ pour la dernière ligne:
sed '$d' file
cat file.txt | head -n -1 > new_file.txt
Attention, semble-t-il, selon la dernière ligne de file.txt
(s'il se termine par EOF
ou \n
puis EOF
), le nombre de lignes dans new_file.txt
peut être le même (que file.txt
) après cette commande (cela se produit lorsqu'il n'y a pas de \n
) - dans tous les cas, le contenu de la dernière ligne est supprimé.
Notez également que vous devez utiliser un deuxième fichier (intermédiaire). Si vous cat et redirigez vers le même fichier, vous l'effacerez.
head --lines=-1
. Je suis d'abord tombé sur cette possibilité dans la page de manuel de head sur un système SLES11SP2 (coreutils-8.12-6.23.1)
tail
et head
font partie des coreutils
- rpm (au moins pour les systèmes basés sur rpm).
Selon le changelog de coreutils, cette syntaxe est prise en charge depuis coreutils-version 5.0.1
Mauvaise nouvelle: selon la page de manuel RH5, cette option n'est pas décrite
Bonne nouvelle: cela fonctionne avec RH5 (donc dans votre cas: cela fonctionne - au moins avec une version actuelle de RH5).
rpm -q coreutils
me montre (sur CentOS 5.8): coreutils-5.97-34.el5_8.1
Je ne sais pas si RH5.5. a déjà la version coreutils qui le prend en charge. Mais 5.5 a quand même EoLed.
sed '$d' ~/path/to/your/file/name
sed -i '' -e '$ d' ~/path/to/your/file/name