RLB

Just sharing knowledge

sedコマンドで改行(LF)に変換したいと思ったら、trコマンド

ついついテキスト処理で置換を思い浮かべると、sedが思いつきますが、意外と改行をまたぐ処理の場合がうまく動作しない。改行から変換はOKだが、逆パターン(文字列→改行コード)が意外と上手くいかない。他の言語のように簡単に\nで動いて欲しい。

実はそんな人のためにtrコマンド(translate characters)という便利なコマンドがあるので活用する。

#trは標準入力のみ受け付けるコマンドのためパイプで利用する
cat some.txt | tr "\n" ","

#逆も簡単
cat some.txt | tr "," "\n"

sedで改行を取り扱えなくもないが割りと不便だったりする。

#コマンドライン上から以下を入力する
sed some.txt 's/,/\
/g'

ワンラインで実行する場合は、切り替え後の文字列にエスケープとCtrl-V &Ctrl-J(=LF)を流し込めばOK。

ただ基本的にsedはあくまでも「行単位」の処理がメインで、改行をまたぐテキスト置換はawkやtrも組み合わせてやっていこう。