Permettez-moi de préciser le caractère de nouvelle ligne:
$ echo Hello > file1 ; cat file1
Hello
$ echo -n Hello > file2 ; cat file2
Hello$
Ici, vous pouvez voir qu'il y file1
a un caractère de nouvelle ligne à la fin, mais file2
pas.
Supposons maintenant que j'en ai un file
:
$ cat file
Hello
Welcome to
Unix
$
Et je veux ajouter and Linux
à la fin du fichier, puis echo " and Linux" >> file
sera ajouté à la nouvelle ligne. Mais je veux que la dernière ligne soitUnix and Linux
Donc, pour contourner ce problème, je souhaite supprimer le caractère de nouvelle ligne à la fin du fichier. Par conséquent, comment supprimer le caractère de nouvelle ligne à la fin du fichier?
sed '$s/$/ and linux/'
Réponses:
Si tout ce que vous voulez faire est d'ajouter du texte à la dernière ligne, c'est très simple avec sed. Remplacez
$
(correspondance de motif à la fin de la ligne) par le texte que vous souhaitez ajouter, uniquement sur les lignes de la plage$
(ce qui signifie la dernière ligne).qui sur Linux peut être raccourci
Si vous souhaitez supprimer le dernier octet d'un fichier, Linux (plus précisément GNU coreutils) propose la
truncate
commande, ce qui rend cela très simple.Une façon POSIX de le faire est avec
dd
. Déterminez d'abord la longueur du fichier, puis tronquez-la à un octet de moins.Notez que ces deux tronquent inconditionnellement le dernier octet du fichier. Vous voudrez peut-être d'abord vérifier qu'il s'agit d'une nouvelle ligne:
la source
perl -pi -e 'chomp if eof' myfile
. Par rapport àtruncate
oudd
ça ne vous laissera pas un fichier cassé s'ilmyfile
n'y avait en fait pas de retour à la ligne.Cependant, vous pouvez supprimer le caractère de nouvelle ligne de la ligne en
tr -d '\n'
:Vous pouvez supprimer le caractère de nouvelle ligne à la fin du fichier en utilisant la méthode simple suivante:
head -c -1 file
De
man head
:truncate -s -1 file
de
man truncate
:la source
head -c -1 file | tee file
sûr? Vous netee
souhaitez pas tronquer le fichier avant de commencer?tee
suffit d'ouvrir le fichier, alors qu'ilhead
doit lire et écrire son contenu, iltee
gagnera en pratique la course sauf parfois pour les très petits fichiers.Vous pouvez y parvenir avec perl comme:
Comparé à
truncate
oudd
cela ne vous laissera pas avec un fichier cassé s'ilmyfile
n'y avait en fait aucun retour à la ligne.(la réponse est construite à partir du commentaire et basée sur cette réponse )
la source
Voici une façon avec
sed
- sur la dernière ($
) ligne du fichier, recherchez et remplacez tout et n'importe quoi (.*
) par "ce que vous avez correspondu" suivi de "et Linux":Une solution encore plus simple, gracieuseté d' Isaac , est:
Ceci remplace la fin de ligne (symbolique) par le texte donné.
la source