GNU/Linux >> Linux の 問題 >  >> Linux

Sedは改行文字を置き換えることができますか?

sedと改行文字に問題がありますか?
次の内容のファイルtest.txtがあります

aaaaa  
bbbbb  
ccccc  
ddddd  

以下は機能しません:
sed -r -i 's/n/,/g' test.txt

trを使用できることを知っています これについてですが、私の質問は、sedではなぜそれが不可能に見えるのかということです。

これがファイルを1行ずつ処理することの副作用である場合、なぜこれが発生するのか興味があります。 grepだと思います 新しい行を削除します。 sedも同じことをしますか?

承認された回答:

GNU sedを使用 POSIXLY_CORRECTを提供しました 環境にない(単一行入力の場合):

sed -i ':a;N;$!ba;s/n/,/g' test.txt

https://stackoverflow.com/questions/1251999/sed-how-can-i-replace-a-newline-nから:

  1. :aを使用してラベルを作成します
  2. 現在の行と次の行をNを介してパターンスペースに追加します
  3. 最後の行の前にいる場合は、作成したラベル$!baに分岐します ($! 最後の行でそれを行わないことを意味します(最後の改行が1つあるはずです)。
  4. 最後に、置換により、すべての改行がパターンスペース(ファイル全体)のコンマに置き換えられます。

Linux
  1. Sedを使用してパターン範囲間の行を検索および置換

  2. ファイル内の文字列を置き換える方法は?

  3. Sedを使用して複数行の文字列を置き換える方法は?

  1. SedまたはExを使用してブロック(複数行コード)を新しいテキストブロック(コード)に置き換える方法は?

  2. 行の範囲を行の範囲(sedまたはその他)に置き換えますか?

  3. 特定の行でOsxインサートをSedしますか?

  1. 一致するテキストを見つけて次の行を置き換える

  2. テキスト ファイルの各行で n 番目に出現する文字列を置き換えます

  3. 複数行の Sed 置換