Vous pouvez le faire avec head
de GNU coreutils, il supporte les arguments qui sont relatifs à la fin du fichier. Donc pour laisser le dernier octet, utilisez :
head -c -1
Pour tester la présence d'un saut de ligne à la fin, vous pouvez utiliser tail
et wc
. L'exemple suivant enregistre le résultat dans un fichier temporaire et écrase ensuite l'original :
if [[ $(tail -c1 file | wc -l) == 1 ]]; then
head -c -1 file > file.tmp
mv file.tmp file
fi
Vous pouvez également utiliser sponge
de moreutils
pour effectuer des modifications "sur place" :
[[ $(tail -c1 file | wc -l) == 1 ]] && head -c -1 file | sponge file
Vous pouvez également créer une fonction générale réutilisable en l'insérant dans votre fichier .bashrc
fichier :
# Example: remove-last-newline < multiline.txt
function remove-last-newline(){
local file=$(mktemp)
cat > $file
if [[ $(tail -c1 $file | wc -l) == 1 ]]; then
head -c -1 $file > $file.tmp
mv $file.tmp $file
fi
cat $file
}
Mise à jour
Comme l'a noté KarlWilbur dans les commentaires et utilisés dans Sorentar's réponse , truncate --size=-1
peut remplacer head -c-1
et prend en charge l'édition sur place.
4 votes
Newline n'est qu'un caractère pour les newlines unix. Les sauts de ligne DOS ont deux caractères. Bien sûr, les caractères littéraux " \n "est composé de deux caractères. Lequel cherchez-vous réellement ?
3 votes
Bien que la représentation puisse être
\n
sous linux, c'est un caractère10 votes
Pouvez-vous expliquer pourquoi vous voulez faire cela ? Les fichiers texte sont supposée pour se terminer par une fin de ligne, à moins qu'ils ne soient entièrement vides. Il me semble étrange que vous souhaitiez avoir un fichier aussi tronqué ?
0 votes
La raison habituelle de faire quelque chose comme celle-ci est de supprimer une virgule de fin de ligne d'un fichier CSV. Sed fonctionne bien, mais les nouvelles lignes doivent être traitées différemment.
0 votes
Oui, c'est pour Linux, donc merci de corriger le fait que la nouvelle ligne est juste un caractère. Corrigé dans le message.
0 votes
S'il vous plaît, ne supprimez jamais le dernier saut de ligne dans un fichier de lignes terminées par un saut de ligne. Cela fout en l'air toutes sortes de choses.
10 votes
@ThomasPadron-McCarthy "En informatique, pour chaque bonne raison de faire quelque chose, il existe une bonne raison de ne pas le faire et vice versa." -Jésus -- "vous ne devriez pas faire ça" est une réponse horrible quelle que soit la question. Le format correct est : [comment le faire] mais [pourquoi le faire]. mai être une mauvaise idée]. #sacrilege
0 votes
L'une des raisons de supprimer le saut de ligne de fin est que vous envoyez la chaîne à un autre endroit et que vous ne pouvez pas avoir de saut de ligne de fin.