web-dev-qa-db-ja.com

移植可能なsedの\ nを改行で置き換えます

GNU sed、POSIX sed、およびBSD sedの無数のオプションと混同されています。リテラル\nこれら3つのsedタイプを使用する改行文字を使用しますか?

26
Avinash Raj
sed 's/\\n/\
/g'

置換文字列でreturnを押す直前のバックスラッシュに注意してください。

35
unxnut

ポータブル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にあるものは歴史的なものであり、新しいスクリプトには使用しないでください。

11
terdon

Holdspaceが空の場合は、次のようにすることもできます。

sed '/\\n/G;s/\\n\(.*\)\(.\)/\2\1/;P;D'

...しかし xnut's answer はすでに高速でシンプルなため、思いのままに使用できます。

別の無関係な可能性:

INPUT | sed -n l | while read v ; do printf "${v%?}" ; done

ただし、^ [\ackspace、\beturn、\roctals、whathaveyouなど、すべての標準Cスタイルの\00backslashエスケープを変換することに注意してください。

1
mikeserv

gnu sed以下も機能します:

gsed -n -e 'H;${x;s/\\n/\n/g;p;}'
0
Dirk Hoffmann