sed Befehl ersetzt keinen Text durch ein Zeilenumbruchszeichen

0

Der Befehl Unix sed erkennt \neinen mit Escapezeichen versehenen Backslash n nicht als Zeilenumbruchzeichen. Beispielsweise ersetzt der Befehl sed "s!,!\n!g"Kommas im Eingabetext durch den Buchstaben n und nicht durch ein Zeilenvorschubzeichen.

Wie kann ich sed \nals Newline-Charakter interpretieren lassen?

Hämanth
quelle
Welche Shell benutzt du?
fd0

Antworten:

4

Wenn Sie verwenden bash, können Sie das Zeilenumbruchzeichen einfügen, indem Sie die Eingabetaste als drücken

sed 's!,!\
!g'
entmutigen
quelle
Das funktioniert auch nicht
Hemanth
Ups, meine Entschuldigung. Dies funktioniert:
Hemanth
2

sed "s/,/\n/g" arbeitet hier in bash

Trapangle
quelle
1

Möglicherweise müssen Sie es mit einer Sekunde entkommen \

sed 's!,!\\n!g'

Je nachdem, was Sie tun möchten, müssen Sie möglicherweise auch Leerzeichen entfernen.

Auch bei meinen Tests gab es Probleme mit der Verwendung von "'s anstelle von '' s

Soße
quelle
Dann wird ein Zeichen durch \ n Zeichenfolge ohne Zeichen ersetzt. Funktioniert auch nicht :(
hemanth
Hmm, das hat für einen RedHat 6.7-Rechner funktioniert. Wie sieht Ihre Umgebung aus?
Soße
0

Die Mac-Version von sed hat diese Schwierigkeit. Versuchen Sie, die GNU-Version von sed mit brew install coreutilsund dann zu installieren

gsed "s/,/\\n/g"

sollte arbeiten. Alternativ tr ',' \\nsollte funktionieren, wenn die Suchzeichenfolge nur ein einzelnes Zeichen ist.

Scott Centoni
quelle
0

Tatsächlich verarbeitet Unix Echo + Sed \ n nicht immer als Zeichen für eine neue Zeile. Ich habe es gelöst, indem ich stattdessen Wagenrücklauf-ASCII-0xd mit vertikalem Tabulator-ASCII-0xb bereitgestellt habe.

Fügen Sie beispielsweise mit dem Befehl sed unter Verwendung der Variablen ein neues Zeilenzeichen hinzu:

eol="\xd\xb"
echo -e "hello" | sed "s/$/$eol/"
Ivan M
quelle
Dies spricht die Frage nicht wirklich an.
RalfFriedl