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;
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 ' $(
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)
\n\s
dans le champ 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é.