J'ai les données suivantes et j'ai besoin de tout mettre en 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 ont laissé les données comme ceci:
22791
;14336
;22821
;34653
;21491
;25522
tr -d '\n' < yourfile.txt
Modifier:
Si aucune des commandes publiées ici ne fonctionne, vous avez autre chose qu'une nouvelle ligne séparant vos champs. Vous avez peut-être des fins de ligne DOS/Windows dans le fichier (bien que les solutions Perl puissent fonctionner même dans ce cas)?
Essayer:
tr -d "\n\r" < yourfile.txt
Si cela ne fonctionne pas, vous devrez examiner votre fichier de plus près (dans un éditeur hexadécimal, par exemple) pour déterminer les caractères réellement à supprimer.
Perl -p -i -e 's/\R//g;' filename
Doit faire le travail.
paste -sd "" file.txt
utilisation
head -n 1 filename | od -c
pour comprendre QUEL est le caractère incriminé . puis utilisez
tr -d '\n' <filename
pour LF
tr -d '\r\n' <filename
pour CRLF
tr -d '\n' < file.txt
Ou
awk '{ printf "%s", $0 }' file.txt
Ou
sed ':a;N;$!ba;s/\n//g' file.txt
Cette page ici contient de nombreuses autres méthodes pour supprimer les nouvelles lignes.
modifié pour supprimer les abus félins :)
Vous pouvez éditer le fichier dans vim:
$ vim inputfile
:%s/\n//g
Nerd fact: utilisez ASCII à la place.
tr -d '\012' < filename.extension
(Edité parce que je n'ai pas vu la réponse stupide qui avait la même solution, la seule différence était que la mienne avait l'ASCII)
Si les données sont dans le fichier file.txt, alors:
echo $(<file.txt) | tr -d ' '
La '$(<file.txt)
' lit le fichier et donne le contenu sous la forme d'une série de mots qui «écho» se répercutent ensuite avec un espace. La commande 'tr' supprime alors tous les espaces:
22791;14336;22821;34653;21491;25522;33238;
xargs
utilise également les nouvelles lignes (mais ajoute une dernière ligne):
xargs < file.txt | tr -d ' '
Utiliser l'éditeur de texte gedit (3.18.3)
\n\s
dans Rechercher champRemarque: cela ne résout pas exactement le problème original de l'OP, vieux de 7 ans, mais devrait aider certains utilisateurs de noob linux (comme moi) qui trouvent leur chemin ici depuis la SE avec des questions similaires "comment puis-je obtenir mon texte sur une seule ligne" .
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 juste
99gJ
cela rejoindra toutes vos 99 lignes. Vous pouvez ajuster le nombre 99
selon vos besoins en fonction du nombre de lignes à joindre. Si vous ne faites que rejoindre 1 line, alors seulement gJ
sera suffisant.
Using man 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
En supposant que vous souhaitiez uniquement conserver les chiffres et les points-virgules, procédez comme suit: il n'y a pas de problème majeur d'encodage, mais le dernier "saut de ligne" sera également supprimé:
$ 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.
Pour supprimer également le retour à la fin à la fin du fichier
python -c "s=open('filename','r').read();open('filename', 'w').write(s.replace('\n',''))"
$ Perl -0777 -pe 's/\ n + // g' entrée> sortie
$ Perl -0777 -pe 'tr/\ n // d' input> output
Cela supprimera toutes les lignes contenant uniquement des espaces (espaces et tabulations)
sed '/^[[:space:]]*$/d'
Prenez tout ce avec quoi vous travaillez et dirigez-le vers cela
cat filename | sed '/^[[:space:]]*$/d'
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 certains problèmes de Word-wrap.
Ouvrez gedit
Ensuite Ctrl + H, puis mettez dans la zone de texte Find
\n
et dans Replace with
un espace vide puis remplissez la case à cocher Regular expression
et le tour est joué.
Je reçois 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.
(Je l'ai appelé oneline
si vous êtes curieux)
xsel -b -o | tr -d '\n' | tr -s ' ' | xsel -b -i
xsel -b -o
lit mon presse-papiers
tr -d '\n'
supprime les nouvelles lignes
tr -s ' '
supprime les espaces récurrents
xsel -b -i
le repousse dans le presse-papier
après cela, je collerais le nouveau contenu du presse-papiers dans oneline, dans une console ou autre.
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
Oublié à propos de printf! Donc aussi
awk '/[0-9]+/ { printf "%s;", $0 }' file.txt
ou probablement mieux, ce qui a déjà été donné dans les autres et utilisant awk.