Hier ist meine Lösung mit awk
:
$ awk '{$1=$1}1' FS=\' OFS="\\\'" ORS='\\n' <<< "I'm happy.
You're sad."
Das Ergebnis ist die Ausgabe
I\'m happy.\nYou\'re sad.\n
Erläuterung:
Ich setze das Feldtrennzeichen ( FS
) an '
(wobei es für die shell
como \'
) und die Ausgabe Feldtrennzeichen ( OFS
) an \'
(eingewickelt in "..."
zu entkommen. '
für die shell
und die Flucht vor der \
zweimal, einmal für die shell
und ein zweites Mal für awk
als "\\\'"
). Ohne weitere Optionen wird das Satztrennzeichen ( RS
) ist das Zeilenumbruchzeichen, aber ich setze das Ausgabe Datensatz-Trennzeichen ( ORS
) an \n
(wiederum unter Umgehung des \
pour awk
como \\n
).
Jetzt bleibt nur noch zu erzählen awk
zu tun, ist die Neuberechnung jedes Datensatzes (durch Einstellung von $1
a $1
ändert sich nichts, aber awk
ist der Meinung, dass der Datensatz geändert wurde, und zwar durch die Ersetzung FS
von OFS
und somit jede '
von \'
) und jeden Datensatz ausdrucken (das ist das, was die 1
Muster tut: 1
ist für alle Datensätze wahr, und da keine Aktion angegeben wurde, wird die Standardaktion {print $0}
durchgeführt wird), wodurch effektiv die RS
von ORS
und somit jeder Zeilenumbruch durch \n
.