Comment supprimer les nouvelles lignes d’un fichier texte?

J’ai les données suivantes, et je dois les mettre dans une seule ligne.

J’ai ceci:

22791 ; 14336 ; 22821 ; 34653 ; 21491 ; 25522 ; 33238 ; 

J’ai besoin de ça:

 22791;14336;22821;34653;21491;25522;33238; 

MODIFIER

Aucune de ces commandes ne fonctionne parfaitement.

La plupart d’entre eux laissent les données comme ceci:

 22791 ;14336 ;22821 ;34653 ;21491 ;25522 

 tr -d '\n' < yourfile.txt 

Modifier:

Si aucune des commandes affichées ici ne fonctionne, vous avez autre chose qu'une nouvelle ligne séparant vos champs. Peut-être avez-vous des fins de ligne DOS / Windows dans le fichier (bien que je m'attende à ce que les solutions Perl fonctionnent même dans ce cas)?

Essayer:

 tr -d "\n\r" < yourfile.txt 

Si cela ne fonctionne pas, vous devrez inspecter votre fichier de plus près (par exemple dans un éditeur hexadécimal) pour savoir quels sont les caractères que vous souhaitez supprimer.

 perl -p -i -e 's/\R//g;' filename 

Doit faire le travail

 paste -sd "" file.txt 
 tr -d '\n' < file.txt 

Ou

 awk '{ printf "%s", $0 }' file.txt 

Ou

 sed ':a;N;$!ba;s/\n//g' file.txt 

Cette page contient plusieurs autres méthodes pour supprimer les nouvelles lignes.

édité pour supprimer les abus félins 🙂

utilisation

 head -n 1 filename | od -c 

pour comprendre ce qui est le caractère offensant. puis utiliser

 tr -d '\n'  

pour LF

 tr -d '\r\n'  

pour CRLF

Vous pouvez modifier le fichier dans vim:

 $ vim inputfile :%s/\n//g 

Nerd fact: utilisez plutôt ASCII.

 tr -d '\012' < filename.extension 

(Edité parce que je n'ai pas vu la réponse friggin 'qui avait la même solution, la seule différence était que le mien avait ASCII)

Si les données sont dans fichier.txt, alors:

 echo $( 

Le ' $( ' lit le fichier et donne le contenu sous la forme d'une série de mots qui 'écho' puis résonne avec un espace entre eux. La commande 'tr' supprime alors tous les espaces:

 22791;14336;22821;34653;21491;25522;33238; 

En utilisant l’homme 1 ed:

 # cf. http://wiki.bash-hackers.org/doku.php?id=howto:edit-ed ed -s file <<< $'1,$j\n,p' # print to stdout ed -s file <<< $'1,$j\nwq' # in-place edit 

xargs consum également des nouvelles lignes (mais ajoute une nouvelle ligne finale):

 xargs < file.txt | tr -d ' ' 

En supposant que vous ne vouliez garder que les chiffres et les points-virgules, voici ce qui devrait être fait en supposant qu’il n’y a pas de problèmes majeurs d’encodage, même si cela supprimera le dernier “newline”:

 $ tr -cd ";0-9" 

Vous pouvez facilement modifier ce qui précède pour inclure d’autres caractères, par exemple si vous souhaitez conserver des points décimaux, des virgules, etc.

Utilisation de l’éditeur de texte gedit (3.18.3)

  1. Cliquez sur Rechercher
  2. Cliquez sur Rechercher et remplacer …
  3. Entrez \n\s dans le champ Rechercher
  4. Laissez Remplacer par vide (rien)
  5. Cochez la case Expression régulière
  6. Cliquez sur le bouton Rechercher

Note: cela ne correspond pas exactement au problème original de 7 ans de l’OP, mais devrait aider certains utilisateurs de Linux noob (comme moi) qui trouvent leur chemin depuis les SE avec des questions similaires “comment obtenir mon texte sur une seule ligne” .

  $ perl -0777 -pe 's / \ n + // g' input> sortie 
  $ perl -0777 -pe 'tr / \ n // d' input> sortie 

Je le ferais avec awk, par exemple

 awk '/[0-9]+/ { a = a $0 ";" } END { print a }' file.txt 

(un inconvénient est que a est “accumulé” en mémoire).

MODIFIER

Vous avez oublié printf! Donc aussi

 awk '/[0-9]+/ { printf "%s;", $0 }' file.txt 

ou probablement mieux, ce qui a déjà été donné dans l’autre et en utilisant awk.

J’ai l’habitude de récupérer cet usecase quand je copie un extrait de code d’un fichier et que je veux le coller dans une console sans append de nouvelles lignes inutiles, j’ai fini par faire un alias de bash
(je l’ai appelé en oneline si vous êtes curieux)

 xsel -b -o | tr -d '\n' | tr -s ' ' | xsel -b -i 
  • xsel -b -o lit mon presse-papier

  • tr -d '\n' supprime les nouvelles lignes

  • tr -s ' ' supprime les espaces récurrents

  • xsel -b -i repousse ceci dans mon presse papier

Après cela, je collerais le nouveau contenu du presse-papiers dans oneline dans une console ou autre chose.

Vous manquez la réponse la plus évidente et la plus rapide, en particulier lorsque vous devez effectuer cette opération dans une interface graphique pour corriger un retour à la ligne bizarre.

  • Ouvrir gedit

  • Puis Ctrl + H , puis mettre dans la zone de texte Find \n et dans Replace with un espace vide puis remplir la case à cocher Regular expression et le tour est joué.