1729 Stimmen

Wie kann ich jeden Zeilenumbruch ( \n ) mit einem Leerzeichen mit sed?

Wie kann ich einen Zeilenumbruch (" \n ") mit einem Leerzeichen (" ") unter Verwendung der sed Befehl?

Ich habe es erfolglos versucht:

sed 's#\n# #g' file
sed 's#^$# #g' file

Wie kann ich es reparieren?

18voto

nefuson Punkte 71
cat file | xargs

der Vollständigkeit halber

16voto

Itachi Punkte 5351

Warum habe ich nicht eine einfache Lösung gefunden mit awk ?

awk '{printf $0}' file

printf druckt jede Zeile ohne Zeilenumbrüche, wenn Sie die Originalzeilen durch ein Leerzeichen oder ähnliches trennen wollen:

awk '{printf $0 " "}' file

15voto

coolaj86 Punkte 69032

Leicht verständliche Lösung

Ich hatte dieses Problem. Der Knackpunkt war, dass ich die Lösung brauchte, um auf BSDs (Mac OS X) und GNUs (Linux und Cygwin ) sed y tr :

$ echo 'foo
bar
baz

foo2
bar2
baz2' \
| tr '\n' '\000' \
| sed 's:\x00\x00.*:\n:g' \
| tr '\000' '\n'

Ausgabe:

foo
bar
baz

(mit nachgestelltem Zeilenumbruch)

Es funktioniert unter Linux, OS X und BSD - auch ohne UTF-8 Unterstützung oder mit einem miserablen Terminal.

  1. Utilice tr um den Zeilenumbruch durch ein anderes Zeichen zu ersetzen.

    NULL ( \000 ou \x00 ) ist gut, weil es keine UTF-8-Unterstützung braucht und wahrscheinlich auch nicht verwendet wird.

  2. Utilice sed um die NULL

  3. Utilice tr um zusätzliche Zeilenumbrüche zu ersetzen, wenn Sie sie benötigen

15voto

Juan Punkte 904

Die Antwort mit dem Etikett :a ...

Wie kann ich einen Zeilenumbruch ( \n ) mit sed?

... funktioniert in freebsd 7.2 nicht auf der Kommandozeile:

( echo foo ; echo bar ) | sed ':a;N;$!ba;s/\\n/ /g'
sed: 1: ":a;N;$!ba;s/\\n/ /g": unused label 'a;N;$!ba;s/\\n/ /g'
foo
bar

Aber wenn Sie das sed-Skript in eine Datei schreiben oder -e verwenden, um das sed-Skript zu "bauen"...

\> (echo foo; echo bar) | sed -e :a -e N -e '$!ba' -e 's/\\n/ /g'
foo bar

oder ...

> cat > x.sed << eof
:a
N
$!ba
s/\n/ /g
eof

> (echo foo; echo bar) | sed -f x.sed
foo bar

Vielleicht ist das sed in OS X ähnlich.

14voto

Vytenis Bivainis Punkte 2178

Sie können verwenden xargs :

seq 10 | xargs

o

seq 10 | xargs echo -n

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X