J'ai des fichiers qui se terminent par un ou plusieurs sauts de ligne et doivent se terminer par un seul saut de ligne. Comment puis-je faire cela avec les outils Bash / Unix / GNU?
Exemple de mauvais fichier:
1\n
\n
2\n
\n
\n
3\n
\n
\n
\n
Exemple de fichier corrigé:
1\n
\n
2\n
\n
\n
3\n
En d'autres termes: il doit y avoir exactement une nouvelle ligne entre l'EOF et le dernier caractère non nouvelle ligne du fichier.
Implémentation de référence
Lisez le contenu du fichier, coupez une seule nouvelle ligne jusqu'à ce qu'il n'y ait plus deux nouvelles lignes à la fin, réécrivez-la:
#! /bin/python
import sys
with open(sys.argv[1]) as infile:
lines = infile.read()
while lines.endswith("\n\n"):
lines = lines[:-1]
with open(sys.argv[2], 'w') as outfile:
for line in lines:
outfile.write(line)
Clarification: Bien sûr, la tuyauterie est autorisée, si c'est plus élégant.