web-dev-qa-db-fra.com

Comment puis-je supprimer les nouvelles lignes d'un fichier texte?

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;

MODIFIER

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
78
Alucard
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.

173
Tyler McHenry
Perl -p -i -e 's/\R//g;' filename

Doit faire le travail.

8
ZyX
paste -sd "" file.txt
6
Amardeep AC9MF

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

4
MrE
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 :)

4
Vivin Paliath

Vous pouvez éditer le fichier dans vim:

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

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)

2
Byfjunarn

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;
1
Jonathan Leffler

xargs utilise également les nouvelles lignes (mais ajoute une dernière ligne):

xargs < file.txt | tr -d ' '
1
marky

Utiliser l'éditeur de texte gedit (3.18.3)

  1. Cliquez sur Rechercher
  2. Cliquez Rechercher et remplacer ...
  3. Entrez \n\s dans Rechercher champ
  4. Laisser Remplacer par blanc (rien)
  5. Vérifier Expression régulière box
  6. Cliquez sur le bouton Rechercher

Remarque: 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" .

1

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.

1
Leon li

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
1
carlmund

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.

1
peak

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',''))"
0
crizCraig
$ Perl -0777 -pe 's/\ n + // g' entrée> sortie
$ Perl -0777 -pe 'tr/\ n // d' input> output
0
Greg Bacon

Utilisez sed avec classes POSIX

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

Exemple

cat filename | sed '/^[[:space:]]*$/d'

0
jasonleonhard

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é.

0
Eduard Florinescu

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.

0
Mohammad AbuShady

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.

0
ShinTakezou