GNU sed
、POSIX sed
、およびBSD sed
の無数のオプションと混同されています。リテラル\n
これら3つのsed
タイプを使用する改行文字を使用しますか?
sed 's/\\n/\
/g'
置換文字列でreturnを押す直前のバックスラッシュに注意してください。
ポータブルsed
の回答はすでにあるので、改行をどうにか操作する必要がある場合は、sed
が最適なツールになることはめったにありません。 Perlはsed
とほぼ同じくらい移植可能であり、ほとんどの* nixシステムにデフォルトでインストールされ、これを非常に簡単に処理できます。
printf '%s\n' 'aa\nbb' | Perl -pe 's/\\n/\n/g'
もう1つの移植性の高い選択肢はawk
です。
printf '%s\n' 'aa\nbb' | awk '{gsub("\\\\n","\n")};1'
Solarisでは、/ usr/xpg4/binにある標準のawkを使用することを忘れないでください。/binにあるものは歴史的なものであり、新しいスクリプトには使用しないでください。
H
oldspaceが空の場合は、次のようにすることもできます。
sed '/\\n/G;s/\\n\(.*\)\(.\)/\2\1/;P;D'
...しかし xnut's answer はすでに高速でシンプルなため、思いのままに使用できます。
別の無関係な可能性:
INPUT | sed -n l | while read v ; do printf "${v%?}" ; done
ただし、^ [\
ackspace、\b
eturn、\r
octals、whathaveyouなど、すべての標準Cスタイルの\00
backslashエスケープを変換することに注意してください。
gnu sed
以下も機能します:
gsed -n -e 'H;${x;s/\\n/\n/g;p;}'