sedで改行を置換・削除する

sedでは、普通に「\n」を指定しただけだと改行の削除や置換を行うことができない。

blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test1.txt
1.aaa
2.bbb
3.ccc
4.ddd
blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test1.txt | sed 's/\n//g'
1.aaa
2.bbb
3.ccc
4.ddd

じゃ、どうしたら改行を置換できるのか。
GNU版のsedであれば、以下のようにすればいい。

sed ':a;N;$!ba;s/\n/ /g'
sed -z 's/\n/ /g'

blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test1.txt
1.aaa
2.bbb
3.ccc
4.ddd
blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test1.txt | sed 's/\n//g'
1.aaa
2.bbb
3.ccc
4.ddd
blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test1.txt | sed ':a;N;$!ba;s/\n/ /g'
1.aaa 2.bbb 3.ccc 4.ddd
blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test1.txt | sed -z 's/\n/ /g'
1.aaa 2.bbb 3.ccc 4.ddd

GNU版でない場合(Macとか)、以下のようにすればよい。

sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ /g'