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?


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'

Das funktioniert auch nicht
Hemanth

Ups, meine Entschuldigung. Dies funktioniert:
Hemanth


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


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.


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/"

Dies spricht die Frage nicht wirklich an.
RalfFriedl
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.