を使用すると一般的に発生する問題ですsed
。\n
sed
sed
私のファイルには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
ソリューションはおそらくはるかに速いでしょう。