it-swarm.com.de

Wie entferne ich Zeilenumbrüche aus einer Textdatei?

Ich habe die folgenden Daten, und ich muss alles in einer Zeile zusammenfassen.

Ich habe das:

22791

;

14336

;

22821

;

34653

;

21491

;

25522

;

33238

;

Ich brauche das:

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

BEARBEITEN

Keiner dieser Befehle funktioniert einwandfrei.

Die meisten lassen die Daten so aussehen:

22791

;14336

;22821

;34653

;21491

;25522
78
Alucard
tr -d '\n' < yourfile.txt

Bearbeiten:

Wenn keiner der hier veröffentlichten Befehle funktioniert, haben Sie etwas anderes als einen Zeilenumbruch, der Ihre Felder trennt. Möglicherweise haben Sie DOS/Windows-Zeilenenden in der Datei (obwohl ich davon ausgehen würde, dass die Perl-Lösungen auch in diesem Fall funktionieren)? 

Versuchen:

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

Wenn dies nicht funktioniert, müssen Sie Ihre Datei genauer untersuchen (z. B. in einem Hex-Editor), um herauszufinden, welche Zeichen sich tatsächlich darin befinden, die Sie entfernen möchten.

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

Muss den Job machen.

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

benutzen 

head -n 1 filename | od -c 

um herauszufinden, WAS ist das beleidigende Zeichen . verwenden Sie dann 

tr -d '\n' <filename

für LF

tr -d '\r\n' <filename

für CRLF

4
MrE
tr -d '\n' < file.txt

Oder

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

Oder

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

Diese Seite hier hat eine Reihe anderer Methoden, um Zeilenumbrüche zu entfernen.

bearbeitet, um Katzenmissbrauch zu entfernen :)

4
Vivin Paliath

Sie können die Datei in vim bearbeiten:

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

Nerd-Fakt: Verwenden Sie stattdessen ASCII.

tr -d '\012' < filename.extension   

(Redigiert, weil ich die verdammte Antwort nicht sah, die die gleiche Lösung hatte, der einzige Unterschied bestand darin, dass meine ASCII-Zeichen hatte)

2
Byfjunarn

Wenn die Daten in file.txt sind, dann:

echo $(<file.txt) | tr -d ' '

Die '$(<file.txt)' liest die Datei und gibt den Inhalt als eine Reihe von Wörtern an, die 'echo' mit einem Leerzeichen zwischen ihnen widerhallen. Der Befehl 'tr' löscht dann alle Leerzeichen:

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

xargs verwendet auch Zeilenumbrüche (fügt jedoch einen abschließenden Zeilenumbruch hinzu):

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

Verwenden des gedit-Texteditors (3.18.3)

  1. Klicken Sie auf Suchen
  2. Klicken Sie auf Suchen und Ersetzen ...
  3. Geben Sie \n\s in das Feld Find ein
  4. Lassen Sie ersetzen durch blank (nichts)
  5. Überprüfen Sie Regulärer Ausdruck Kästchen
  6. Klicken Sie auf die Schaltfläche Find

Hinweis: Das ursprüngliche 7-jährige Problem des OP wird nicht genau angesprochen, es sollte jedoch einigen Noob-Linux-Benutzern (wie mir) helfen, die ihren Weg von den SEs mit ähnlichen Fragen finden .

Hatte heute den gleichen Fall, sehr einfach in vim oder nvim. Sie können gJ verwenden, um Linien zu verbinden. Für Ihren Anwendungsfall einfach tun 

99gJ

dadurch werden alle 99 Zeilen verbunden. Sie können die Nummer 99 je nach Anzahl der zu verbindenden Zeilen anpassen. Wenn Sie einfach 1 line zusammenfügen, ist nur gJ gut genug.

1
Leon li

Mit 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

Angenommen, Sie möchten nur die Ziffern und die Semikolons beibehalten, sollten die folgenden Schritte ausreichen, wenn Sie keine größeren Codierungsprobleme haben, obwohl dies auch den letzten "Zeilenumbruch" entfernt:

$ tr -cd ";0-9"

Sie können das Obige leicht ändern, um andere Zeichen, z. wenn Sie Dezimalpunkte, Kommas usw. beibehalten möchten.

1
peak

Entfernen Sie auch den abschließenden Zeilenumbruch am Ende der Datei

python -c "s=open('filename','r').read();open('filename', 'w').write(s.replace('\n',''))"
0
crizCraig
$ Perl -0777 -pe 's/\ n + // g' input> -Ausgabe
$ Perl -0777 -pe 'tr/\ n // d' input> -Ausgabe
0
Greg Bacon

Verwenden Sie sed mit POSIX-Klassen

Dadurch werden alle Zeilen entfernt, die nur Leerzeichen enthalten (Leerzeichen und Tabulatoren).

sed '/^[[:space:]]*$/d'

Nehmen Sie einfach das, womit Sie arbeiten, und leiten Sie es weiter

Beispiel

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

0
jasonleonhard

Sie vermissen die offensichtlichste und schnellste Antwort, besonders wenn Sie dies in der GUI tun müssen, um einen seltsamen Zeilenumbruch zu korrigieren.

  • Öffne gedit

  • Dann Ctrl + HGeben Sie dann in das Find Textfeld \n und in das Replace with ein Leerzeichen ein und füllen Sie das Kontrollkästchen Regular expression und voila aus.

0

Normalerweise bekomme ich diese Anwendung, wenn ich ein Code-Snippet aus einer Datei kopiere und es in eine Konsole einfügen möchte, ohne unnötig neue Zeilen hinzufügen zu müssen. Am Ende habe ich einen Bash-Alias ​​verwendet
(Ich nannte es oneline, wenn Sie neugierig sind)

xsel -b -o | tr -d '\n' | tr -s ' ' | xsel -b -i
  • xsel -b -o liest meine Zwischenablage

  • tr -d '\n' entfernt neue Zeilen

  • tr -s ' ' entfernt wiederkehrende Leerzeichen

  • xsel -b -i schiebt dies zurück in meine Zwischenablage

danach würde ich den neuen Inhalt der Zwischenablage in oneline in einer Konsole oder was auch immer einfügen.

0

Ich würde es mit awk tun, z.

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

(Ein Nachteil ist, dass a im Speicher "angesammelt" wird).

BEARBEITEN

Ich habe Printf vergessen! Desweiteren

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

oder wahrscheinlich besser, was es bereits in den anderen ans gegeben wurde, die awk verwenden.

0
ShinTakezou