sedで改行を置換し、文字列にする方法を紹介します。
結論
最初の一行だけ置換するなら
sed -z "s/\n/置換したい文字列/"
全行置換するなら最後にgをつける
sed -z "s/\n/置換したい文字列/g"
オプション解説
-z :通常文字列を改行で分割するところを、NULLで行を分割するオプション。
実例
こんなテキストを用意します。
$ cat list.txt
Tom_
_Jon_
_Hoge_
最初の行の改行コードを文字列「and」に置換するパターン。
$ cat list.txt | sed -z "s/\n/and/"
Tom_and_Jon_
_Hoge_
次は全ての行の改行コードを文字列「and」に置換するパターン。
$ cat list.txt | sed -z "s/\n/and/g"
Tom_and_Jon_and_Hogeand_and$
上記では末尾まで改行が消えてしまう($が末尾についてしまう)のと、
さらにandも末尾についてしまうのがイケていない。
次のように書くとすっきり出力される。
$ cat list.txt | sed -z "s/\n/and/g" | sed "s/and$/\n/g"
Tom_and_Jon_and_Hoge_
【応用編】ip a の結果をインターフェースごとに一行にまとめたい
普通に ip a コマンドを実行すると次のようになる。
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:86:08:23 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute eth0
valid_lft 73270sec preferred_lft 73270sec
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:af:6f:bd brd ff:ff:ff:ff:ff:ff
inet 192.168.33.21/24 brd 192.168.33.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:feaf:6fbd/64 scope link
valid_lft forever preferred_lft forever
この結果を、行頭から項番を消したうえで、インターフェースごとに一行にまとめてみる。
次のコマンドで実現可能。
$ ip a | sed -z "s/\n/TmpString/g" | sed "s/TmpString[0-9]: /\n/g" | sed "s/^1: //g" | sed -z "s/TmpString$/\n/g"
実行例
$ ip a | sed -z "s/\n/TmpString/g" | sed "s/TmpString[0-9]: /\n/g" | sed "s/^1: //g" | sed -z "s/TmpString$/\n/g"
lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000TmpString link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00TmpString inet 127.0.0.1/8 scope host loTmpString valid_lft forever preferred_lft forever
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000TmpString link/ether 08:00:27:86:08:23 brd ff:ff:ff:ff:ff:ffTmpString inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute eth0TmpString valid_lft 72935sec preferred_lft 72935sec
eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000TmpString link/ether 08:00:27:af:6f:bd brd ff:ff:ff:ff:ff:ffTmpString inet 192.168.33.21/24 brd 192.168.33.255 scope global noprefixroute eth1TmpString valid_lft forever preferred_lft foreverTmpString inet6 fe80::a00:27ff:feaf:6fbd/64 scope link TmpString valid_lft forever preferred_lft forever
参考
https://www.atmarkit.co.jp/ait/articles/1610/17/news015.html