MaxOSXでsedを使用する場合は、\n改行の代わりにnを印刷してください。

MaxOSXでsedを使用する場合は、\n改行の代わりにnを印刷してください。

を使用すると一般的に発生する問題ですsed\nsedsed

私のファイルにはmyfile次の内容が含まれています。

1 2 3 4 5

私がこれを使うとき:

sed 's/ /\n/g' myfile

わかりました:

1n2n3n4n5

これを得る代わりに:

1
2
3
4
5

問題がどこにあるかを知っている人はいますか?

答え1

あなたはあなたを使っているので、OSX 10.8あなたのsedツールではFreeBSD sedありませんGNU sed。したがって、改行文字としてFreeBSD sed解釈されません。\n

あなたは試すことができます:

$ sed 's/ /\'$'\n/g' myfile

$'\n/g'文字列を標準エスケープ拡張として解釈し、bash処理する\n前に改行文字に変換します。sed

またはtr代わりに使用してくださいsed

$ tr -s ' ' '\n' < myfile

答え2

Gnoucはその理由を理解していますが、\nステートメントの右側にaを指定する移植可能な方法は次のs///とおりです。

s//\
/

Gただし、次のように空の予約スペースのパターンスペースの末尾にewlineを\n追加することもできます。

G

右側のy翻訳演算子と一緒に翻訳演算子を使用することもできます。\nだからあなたの...

sed 's/ /\n/g' myfile

...これを書くと、期待どおりに機能します...

sed 'y/ /\n/' myfile

...そして同じことをすることができるという利点があります。非常に小さいより速く。 Gnoucのtrソリューションはおそらくはるかに速いでしょう。

関連情報