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?
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?
Eine Lösung, die mir besonders gut gefällt, ist das Anhängen der gesamten Datei an den Hold Space und das Ersetzen aller Zeilenumbrüche am Ende der Datei:
$ (echo foo; echo bar) | sed -n 'H;${x;s/\n//g;p;}'
foobar
Allerdings hat mir jemand gesagt, dass der Laderaum in einigen Sediment-Implementierungen endlich sein kann.
Sie können auch die Standard-Texteditor :
printf '%s\n' '%s/$/ /' '%j' 'w' | ed -s file
Hinweis: Dies speichert das Ergebnis zurück in file
.
Wie bei den meisten sed
Antworten hier, leidet diese Lösung darunter, dass zuerst die gesamte Datei in den Speicher geladen werden muss.
Eine weitere GNU sed
Methode, fast dasselbe wie Zsolt Botykai Antwort aber diese verwendet sed
die weniger häufig verwendete y
( transliterieren. ), der Folgendes speichert ein Byte des Codes (die nachgestellte g
):
sed ':a;N;$!ba;y/\n/ /'
Man würde hoffen y
würde schneller laufen als s
(vielleicht bei tr
Geschwindigkeiten, 20x schneller), aber in GNU sed v4.2.2 y
geht es um 4% langsamer als s
.
Mehr tragbar BSD sed
Version:
sed -e ':a' -e 'N;$!ba' -e 'y/\n/ /'
Sie ist sed das die neuen Zeilen nach der "normalen" Ersetzung einführt. Zuerst wird das Zeichen für den Zeilenumbruch abgeschnitten, dann wird es gemäß Ihren Anweisungen verarbeitet, und dann wird ein Zeilenumbruch eingefügt.
Verwendung von sed Sie können "das Ende" einer Zeile (nicht den Zeilenumbruch) nach dem Beschneiden durch eine beliebige Zeichenkette für jede Eingabezeile ersetzen; aber, sed werden unterschiedliche Zeilen ausgegeben. Nehmen wir zum Beispiel an, Sie wollten das "Zeilenende" durch "===" ersetzen (allgemeiner als das Ersetzen durch ein einzelnes Leerzeichen):
PROMPT~$ cat <<EOF |sed 's/$/===/g'
first line
second line
3rd line
EOF
first line===
second line===
3rd line===
PROMPT~$
Um den Zeilenumbruch durch die Zeichenkette zu ersetzen, können Sie, wenn auch ineffizient, folgendes verwenden tr um die Zeilenumbruchzeichen durch ein "Sonderzeichen" zu ersetzen, und verwenden Sie dann sed um das Sonderzeichen durch die gewünschte Zeichenfolge zu ersetzen.
Zum Beispiel:
PROMPT~$ cat <<EOF | tr '\n' $'\x01'|sed -e 's/\x01/===/g'
first line
second line
3rd line
EOF
first line===second line===3rd line===PROMPT~$
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.