Ersetzen Sie alle Zeilenumbrüche mit Ausnahme der letzten

38

Wie kann ich alle Zeilenumbrüche mit Ausnahme des letzten Zeilenumbruchs durch Leerzeichen ersetzen? Ich kann alle Zeilenumbrüche durch Leerzeichen ersetzen, traber wie kann ich das mit einigen Ausnahmen tun?

Gilles 'SO - hör auf böse zu sein'
quelle

Antworten:

42

Sie können verwenden paste -s -d ' ' file.txt:

$ cat file.txt
one line
another line
third line
fourth line

$ paste -s -d ' ' file.txt 
one line another line third line fourth line
Grebneke
quelle
1
Cool! Die Optionen -sund -dscheinen für diesen Fall wie gemacht zu sein.
mkc
10

Sie können verwenden tr, um alle Zeilenumbrüche in Leerzeichen zu ersetzen und die Ausgabe an seddas letzte Leerzeichen weiterzuleiten und es wieder in eine neue Zeile zu setzen:

tr '\n' ' ' < afile.txt | sed '$s/ $/\n/'
mkc
quelle
5

Neuimplementierung von vonbrands Idee in Perl, vorausgesetzt die Datei ist klein genug:

perl -p00e 's/\n(?!\Z)/ /g' your_file
Joseph R.
quelle
+1, da diese Methode für Ersetzungen mit Multibyte-Zeichen (im Gegensatz zu GNU Paste)
funktioniert
-1

Sowas sed -e 's;\n\(.\); \1;'sollte man machen ...

vonbrand
quelle
-1

Das hat bei mir funktioniert.

tr '\n' ' ' < file_with_new_line   | sed 's/\ $//g' > file_with_space
Abhijit
quelle
Dadurch wird auch die letzte Zeile entfernt.
Terdon
Ich denke nicht, es funktioniert gut. Hast du es wirklich versucht ???
Abhijit
Ja, habe ich. Hast du? Ihr trBefehl ersetzt alle Zeilenumbrüche durch Leerzeichen und Ihr sedBefehl entfernt das letzte Leerzeichen. Dies führt zu einer Datei ohne abschließenden Zeilenumbruch und ist daher nicht das, was die Frage verlangt. Übrigens hat gder sedBefehl keinen Sinn, int zu verwenden . Da du verwendest $, kann es nur am Ende passen, das gist sinnlos. Sie müssen auch nicht aus dem Raum entkommen, das `` macht auch keinen Unterschied.
Terdon