改行文字をsed(a la tr)に置き換えます。 [重複]

改行文字をsed(a la tr)に置き換えます。 [重複]
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

おすすめ記事