私はGNU sed
、POSIX sed
、BSDのsed
数え切れないほど多くのオプションのために非常に混乱しています。\n
この3つのタイプを使用してテキストを改行に置き換えるにはどうすればよいですか?sed
答え1
sed 's/\\n/\
/g'
Enterキーを押す前に、代替文字列のバックスラッシュを書き留めます。
答え2
移植可能な回答が得られたので、何らかの方法で改行文字を操作する必要がある場合は、これが使用するのに最適なツールではないことに言及したいとsed
思います。sed
Perl はほとんど移植可能で、sed
ほとんどの *nix システムにデフォルトでインストールされ、非常に簡単に処理できます。
printf '%s\n' 'aa\nbb' | perl -pe 's/\\n/\n/g'
移植性に優れた別のオプションは次のとおりですawk
。
printf '%s\n' 'aa\nbb' | awk '{gsub("\\\\n","\n")};1'
Solarisでは、/usr/xpg4/binの標準awkを使用する必要があることに注意してください。 / binのawkは履歴バージョンなので、新しいスクリプトには使用しないでください。
答え3
oldspaceが空の場合は、H
次のこともできます。
sed '/\\n/G;s/\\n\(.*\)\(.\)/\2\1/;P;D'
...しかしUxnutの答えすでに早くて簡単になっているので、欲しいものは何でもできます。
関連していないもう一つの可能性:
INPUT | sed -n l | while read v ; do printf "${v%?}" ; done
ただし、^thatはackspace、eturn、8進数などのすべての標準Cスタイル\
バックスラッシュエスケープを変換することに注意してください。\b
\r
\00
答え4
私はsedが好きですが、最も簡単で移植性の高いソリューションはechoを使用することだと思います。
echo -e "string with\n in it"
または、ファイルに "\n" の文字列が含まれている場合は、コマンド置換を使用します。
echo -e $(filename)
次に、必要に応じてリダイレクトを追加してファイルに保存します。