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