J'ai les données suivantes, et je dois tout mettre en 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;
ÉDITER
Aucune de ces commandes ne fonctionne parfaitement.
La plupart d'entre eux laissent les données ressembler à ceci:
22791
;14336
;22821
;34653
;21491
;25522
Réponses:
Éditer:
Si aucune des commandes publié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 (même si je m'attendrais à ce que les solutions Perl fonctionnent même dans ce cas)?
Essayer:
Si cela ne fonctionne pas, vous allez devoir inspecter votre fichier de plus près (par exemple dans un éditeur hexadécimal) pour découvrir quels caractères sont réellement là que vous souhaitez supprimer.
la source
tr
ne convient pas aux lignes vides. Qu'est-ce que tu penses? - - Je pense quesed
c'est la meilleure option comme décrit ici stackoverflow.com/q/16414410/54964echo -n $(tr -d "\n" < yourfile.txt) > yourfile.txt
Doit faire le travail.
la source
perl -pie 's/\R//g' filename
la source
paste -sd ""
ne fonctionne pas sur STDIN par défaut, donc si vous y(some command) | paste -sd "" -
paste -sd'\0' -
Ou
Ou
Cette page ici a un tas d'autres méthodes pour éliminer les nouvelles lignes.
modifié pour supprimer les abus félins :)
la source
utilisation
pour comprendre QUEL est le personnage fautif. puis utilisez
pour LF
pour CRLF
la source
Vous pouvez modifier le fichier dans vim:
la source
:%s/\n/ /g
Utilisation de man 1 ed:
la source
Fait nerd: utilisez plutôt ASCII.
(Modifié 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)
la source
Utiliser sed avec les classes POSIX
Cela supprimera toutes les lignes contenant uniquement des espaces (espaces et tabulations)
sed '/^[[:space:]]*$/d'
Prends juste ce avec quoi tu travailles et dirige-le vers ça
Exemple
cat filename | sed '/^[[:space:]]*$/d'
la source
la source
Si les données sont dans file.txt, alors:
Le '
$(<file.txt)
' 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:la source
tr -d '\n' < file.txt
, ce que fait la réponse acceptée (et je suis surpris de ne pas l'avoir écrite à l'époque). C'était probablement juste écrit pour montrer «encore une autre façon de le faire».xargs
consomme également des nouvelles lignes (mais ajoute une dernière nouvelle ligne à la fin):la source
En supposant que vous ne souhaitiez conserver que les chiffres et les points-virgules, ce qui suit devrait faire l'affaire en supposant qu'il n'y a pas de problèmes d'encodage majeurs, bien que cela supprimera également le tout dernier «saut de ligne»:
Vous pouvez facilement modifier ce qui précède pour inclure d'autres caractères, par exemple si vous souhaitez conserver les points décimaux, les virgules, etc.
la source
Utilisation de l'éditeur de texte gedit (3.18.3)
\n\s
dans le champ RechercherRemarque: cela ne résout pas exactement le problème d'origine de l'OP, vieux de 7 ans, mais devrait aider certains utilisateurs de noob linux (comme moi) qui trouvent leur chemin ici à partir des SE avec des questions similaires "comment obtenir mon texte sur une seule ligne" .
la source
Avait le même cas aujourd'hui, super facile dans vim ou nvim, vous pouvez utiliser
gJ
pour joindre des lignes. Pour votre cas d'utilisation, faites simplementcela rejoindra toutes vos 99 lignes. Vous pouvez ajuster le nombre
99
selon vos besoins en fonction du nombre de lignes à joindre. Si tout se joindre à 1 ligne, alors seulementgJ
est assez bon.la source
Je le ferais avec awk, par exemple
(un inconvénient est que a est "accumulé" en mémoire).
ÉDITER
Oublié printf! Donc aussi
ou probablement mieux, ce qu'il a déjà été donné dans les autres ans en utilisant awk.
la source
J'obtiens généralement ce cas d'utilisation lorsque je copie un extrait de code à partir d'un fichier et que je veux le coller dans une console sans ajouter de nouvelles lignes inutiles, j'ai fini par faire un alias bash
(je l'ai appelé
oneline
si vous êtes curieux)xsel -b -o
lit mon presse-papierstr -d '\n'
supprime les nouvelles lignestr -s ' '
supprime les espaces récurrentsxsel -b -i
repousse ça dans mon presse-papiersaprès cela, je collerais le nouveau contenu du presse-papiers en ligne dans une console ou autre.
la source
Il vous manque la réponse la plus évidente et la plus rapide, en particulier lorsque vous devez le faire dans l'interface graphique afin de corriger un retour de mots étrange.
Ouvert
gedit
Puis Ctrl+ H, puis mettez dans la
Find
zone de texte\n
et dansReplace with
un espace videpuis remplissez la case à cocher
Regular expression
et le tour est joué.la source
Pour supprimer également la nouvelle ligne de fin à la fin du fichier
la source