🖥

シェル — BSD版のsedでテキストを改行「に」置換をする方法

2023/08/26に公開

過去にも何度かハマったが、その頃はBSDやGNUの違いがあるということも知らず、なんとなくの理解で終わってた案件。

結論

使えるならGNU版を使おう。

GNUの例

echo 'A:B:C' | sed 's/:/\n/g'
A
B
C

何の不思議もなく直感的に使える。


  • sed (GNU sed) 4.4
  • docker run --interactive --tty ubuntu /bin/bash

BSD版

こんな風に書かないといけないっぽい。

echo 'A:B:C' | sed 's/:/\
/g'

A
B
C

または

echo 'A:B:C' | sed -e 's/:/\'$'\n/g'
A
B
C

嘘だろ。

'$' の記号の意味も知らないし、調べたいとも思わないぐらい。


  • Mac OS X High Sierra
  • GNU bash, version 4.4.0(1)-release (x86_64-apple-darwin15.6.0)

BSDの他のコマンド例

以下の書き方はどれも期待しない結果。

echo 'A:B:C' | sed -e 's/:/\n/g'
AnBnC
echo 'A:B:C' | sed 's/:/\n/g'
AnBnC
echo 'A:B:C' | sed 's/:/\\n/g'
A\nB\nC
echo 'A:B:C' | sed 's/:/\r/g'
ArBrC
echo 'A:B:C' | sed 's/:/\\r/g'
A\rB\rC
echo 'A:B:C' | sed "s/:/\n/g"
AnBnC
echo 'A:B:C' | sed "s/:/\\n/g"
AnBnC
echo 'A:B:C' | sed "s/:/\\r/g"
ArBrC
echo 'A:B:C' | sed "s/:/\r/g"
ArBrC
echo 'A:B:C' | sed "s/:/\r\n/g"
ArnBrnC
echo 'A:B:C' | sed "s/:/\\r\\n/g"
ArnBrnC
echo 'A:B:C' | sed "s/:/\\\r\\\n/g"
A\r\nB\r\nC

あわせて読みたい?

Ref

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2018-08-23

Discussion