$string
Angenommen, ich habe eine Shell-Variable , die Text mit mehreren Zeilenumbrüchen enthält, z.
string="this
is
a test"
Ich möchte diese Zeichenfolge in eine neue Zeichenfolge new_string
konvertieren, in der alle Zeilenumbrüche in Leerzeichen umgewandelt werden:
new_string="this is a test"
Ich habe es versucht:
print $string | sed 's/\n/ /g'
aber es hat nicht funktioniert
Ich frage mich auch, ob es eine Möglichkeit gibt, dies mit perl -0777 's/\n/ /g'
oder vielleicht mit dem Befehl zu tun tr
.
Antworten:
Wenn Sie nur die neuen Zeilen in der Zeichenfolge entfernen möchten, müssen Sie nicht verwenden
sed
. Sie können nur verwendenwie andere gezeigt hatten.
Wenn Sie jedoch neue Zeilen mit in Leerzeichen in einer Datei konvertieren möchten,
sed
können Sie Folgendes verwenden:oder sogar
awk
:quelle
sponge
ist ein nützliches Dienstprogramm zum Überschreiben einer Eingabedatei. Es ist Teil des Paketsmoreutils
... zB.awk '$1=$1' ORS=' ' file |sponge file
moreutils
...Sie könnten
tr
stattdessen versuchen, Folgendes zu verwenden:quelle
Eine weitere Option wäre die Verwendung
xargs
(die außerdem mehrere Leerzeichen komprimiert):quelle
Echo ignoriert Leerzeichen, daher sollte es funktionieren:
quelle
Wenn Sie bereits die Zeichenfolge als bash Variable haben, wie Ihr Beispiel zeigt, ist es sinnlos und eine Verschwendung von Ressourcen (und Typisierung) zu nennen
sed
,awk
,printf
etc ... Sie können einfach verwenden bash variable Expansion :Sie müssen es nicht einmal neu zuweisen. Sie können die Erweiterung
$string
unverändert verwenden und unverändert lassen.quelle
Sie können diesen awk-Befehl auch versuchen,
Beispiel:
quelle
Dies konvertiert eine beliebige Folge von einem oder mehreren
\n
in der Shell-Variablen vorkommenden ewline-Zeichen$string
in ein einzelnes<space>
.quelle
Sie können den einfachen sed-Befehl verwenden
quelle