Ich habe die folgenden Daten und 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 von ihnen lassen die Daten so aussehen:
22791
;14336
;22821
;34653
;21491
;25522
Antworten:
Bearbeiten:
Wenn keiner der hier veröffentlichten Befehle funktioniert, haben Sie etwas anderes als eine neue Zeile, die Ihre Felder trennt. Möglicherweise haben Sie DOS / Windows-Zeilenenden in der Datei (obwohl ich erwarten würde, dass die Perl-Lösungen auch in diesem Fall funktionieren)?
Versuchen:
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.
quelle
tr
ist nicht für leere Zeilen geeignet. Was denken Sie? - - Ich denke,sed
ist die beste Option wie hier beschrieben stackoverflow.com/q/16414410/54964Muss den Job machen.
quelle
perl -pie 's/\R//g' filename
quelle
paste -sd ""
funktioniert STDIN standardmäßig nicht. Wenn Sie also eine(some command) | paste -sd "" -
paste -sd'\0' -
Oder
Oder
Diese Seite hier enthält eine Reihe weiterer Methoden zum Entfernen von Zeilenumbrüchen.
bearbeitet, um Katzenmissbrauch zu entfernen :)
quelle
verwenden
um herauszufinden, WAS der beleidigende Charakter ist. dann benutze
für LF
für CRLF
quelle
Sie können die Datei in vim bearbeiten:
quelle
:%s/\n/ /g
Mit man 1 ed:
quelle
Nerd-Fakt: Verwenden Sie stattdessen ASCII.
(Bearbeitet, weil ich die verdammte Antwort nicht gesehen habe, die dieselbe Lösung hatte, nur der Unterschied war, dass meine ASCII hatte)
quelle
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'
quelle
quelle
Wenn sich die Daten in file.txt befinden, dann:
Das '
$(<file.txt)
' liest die Datei und gibt den Inhalt als eine Reihe von Wörtern an, die 'echo' dann mit einem Leerzeichen dazwischen wiedergeben. Der Befehl 'tr' löscht dann alle Leerzeichen:quelle
tr -d '\n' < file.txt
das, was die akzeptierte Antwort tut (und ich bin überrascht, dass ich sie zu diesem Zeitpunkt nicht geschrieben habe). Dies wurde wahrscheinlich nur geschrieben, um "noch einen anderen Weg zu zeigen".xargs
verbraucht auch Zeilenumbrüche (fügt aber eine letzte nachfolgende Zeilenumbruch hinzu):quelle
Angenommen, Sie möchten nur die Ziffern und Semikolons beibehalten, sollte das Folgende den Trick ausführen, vorausgesetzt, es gibt keine größeren Codierungsprobleme, es wird jedoch auch die allerletzte "neue Zeile" entfernt:
Sie können die obigen Angaben leicht ändern, um andere Zeichen einzuschließen, z. B. wenn Sie Dezimalstellen, Kommas usw. beibehalten möchten.
quelle
Verwenden des gedit-Texteditors (3.18.3)
\n\s
in das Feld Suchen einHinweis: Dies behebt nicht genau das ursprüngliche, 7 Jahre alte Problem des OP, sollte jedoch einigen Noob-Linux-Benutzern (wie mir) helfen, die ihren Weg von den SEs hierher finden, mit ähnlichen Fragen: "Wie bekomme ich meinen Text alle in einer Zeile?" .
quelle
Hatte heute den gleichen Fall, super einfach in vim oder nvim, können Sie
gJ
Linien verbinden. Tun Sie es einfach für Ihren AnwendungsfallDadurch werden alle Ihre 99 Zeilen verbunden. Sie können die Anzahl
99
je nach Anzahl der zu verbindenden Zeilen nach Bedarf anpassen . Wenn nur beitreten 1 Zeile, dann nurgJ
gut genug ist .quelle
Ich würde es mit awk machen, zB
(Ein Nachteil ist, dass a im Speicher "akkumuliert" ist).
BEARBEITEN
Printf vergessen! Desweiteren
oder wahrscheinlich besser, was es schon in den anderen ans mit awk gegeben wurde.
quelle
Normalerweise erhalte ich diesen Anwendungsfall, wenn ich ein Code-Snippet aus einer Datei kopiere und es in eine Konsole einfügen möchte, ohne unnötige neue Zeilen hinzuzufügen. Am Ende habe ich einen Bash-Alias erstellt
(ich habe es genannt,
oneline
wenn Sie neugierig sind).xsel -b -o
liest meine Zwischenablagetr -d '\n'
entfernt neue Zeilentr -s ' '
Entfernt wiederkehrende Leerzeichenxsel -b -i
schiebt dies zurück in meine ZwischenablageDanach würde ich den neuen Inhalt der Zwischenablage in einer Konsole oder was auch immer online einfügen.
quelle
Ihnen fehlt die offensichtlichste und schnellste Antwort, insbesondere wenn Sie dies in der GUI tun müssen, um einen seltsamen Zeilenumbruch zu beheben.
Öffnen
gedit
Dann Ctrl+ H, dann in das
Find
Textfeld\n
und inReplace with
ein leeres Feld,dann Checkbox
Regular expression
und Voila füllen .quelle
So entfernen Sie auch die nachfolgende neue Zeile am Ende der Datei
quelle