Zeilenumbrüche in Textdateien über das Terminal in Mac OS X 10.10 (Yosemite) entfernen

1

Ich versuche, alle Zeilenumbrüche durch ein Komma in einer Textdatei zu ersetzen, aber ich muss den sedBefehl nicht ordnungsgemäß verwenden.

Da ich echo -e "\x0D"den Wagenrücklauf abgeben kann, habe ich vergeblich versucht sed -e 's/open/'$(echo "\x0D")'/' 1.txt > 2.txt. 1.txtenthält den Wagenrücklauf, wie Sie möglicherweise gefolgert haben. Dieser Befehl erstellt, 2.txtwelcher Text enthält x0D.

Benötigt mehr Dokumentation
quelle

Antworten:

1

Dies ist nicht wirklich spezifisch für Mac OS X; Das gleiche Konzept funktioniert auf den meisten Linux / Unix-Betriebssystemen. Aber während Sie dies in sed(Stream-Editor) tun könnten, könnten Sie auch tr(Zeichen übersetzen) wie folgt verwenden:

tr '\r' , < foo.txt

Also, wenn der Inhalt von foo.txtdies ist:

123
456
789

Die Ausgabe dieses trBefehls wäre dann:

123,456,789,

Und um die Ergebnisse dieses Befehls in einer Datei auszugeben, fügen Sie > bar.txtam Ende Folgendes hinzu:

tr '\r' , < foo.txt > bar.txt
JakeGould
quelle
1
Carriage Return (zur Beantwortung der eigentlichen Frage von OP) wäre \r, nicht \n.
Thomas Dickey
Ah! Ja, diese Lösung ist mir bekannt. Ich war auf der Suche, wie es in Sed geht, wenn möglich. Ich habe stundenlang versucht, Unicode oder / r mit sed zu verwenden, konnte aber nicht herausfinden, wie. Ich hätte dir wahrscheinlich die Zeit sparen sollen, indem ich das in meiner ersten Anfrage gepostet habe. Entschuldigung.
Benötigt mehr Dokumentation
@NeedsMoreDocumentation Nah. Entschuldige dich nicht. Mir war nicht klar, dass dies sedspezifisch ist, und diese Antwort war für mich ziemlich einfach zu posten. Also, wenn es jemandem helfen kann, ist alles gut.
JakeGould
0

trist eine bessere Lösung, aber Sie fragten, wie es in zu tun ist sed.

mit ansi -c Zitat:

sed -E 's/'$'\r''/,/' file

sed $'s/\r/,/' file

ohne ansi -c zu zitieren:

cr=$(printf '\r')
sed 's/'"$cr"'/,/' file
fd0
quelle