echo "hi,my,name,is" | sed 's/,/\n/g' >out.txt
生産する:
hi
my
name
is
しかし反対に:
sed 's/\n/,/g' out.txt
生産する:
hi
my
name
is
sed
交換ジョブをキャンセルしてジョブを復元するのはどうですか?
答え1
努力する:
$ sed 'H;1h;$!d;x; s/\n/,/g' out.txt
hi,my,name,is
デフォルトでは、sedは一度に1行ずつ読み取り、処理、印刷します。単一行に改行文字がないため、このコマンドはs/\n/,/g
何もしません。上記のように、解決策はファイル全体を一度に読み取ってから実行することですs/\n/,/g
。
このコマンドはH;1h;$!d;x
ファイル全体を一度に読み込みます。おそらくこれをイディオムとして考えるのが最も簡単でしょう。本当に詳細を知りたい場合:
H
- スペースを予約するために現在の行を追加します。1h
- 最初の行の場合、予約されたスペースを上書きします。$!d
- 最後の行ではない場合は、パターンスペースを削除して次の行にジャンプします。x
- ホールドスペースとパターンスペースを交換し、ファイル全体をパターンスペースに入れます。
代替案:Ah
$ awk 'NR>1{printf ","} {printf "%s",$0} END{print""}' out.txt
hi,my,name,is
または:
$ awk '{printf "%s%s",(NR==1?"":","),$0} END{print""}' out.txt
hi,my,name,is
答え2
GNU sedの使用
echo "hi,my,name,is" | sed 's/,/\n/g' | sed -z 's/\n/,/g'