与えられた単語に基づいてデータを良い列にソートするにはどうすればよいですか?
route -n
たとえば、次のコマンドの出力があります。
default via 172.20.99.254 dev eth0
87.33.17.71 dev tun0 scope link
89.223.15.12 via 172.20.99.254 dev eth0 src 172.20.99.74
172.20.9.0/24 dev eth0 proto kernel scope link src 172.20.99.74
65.46.5.89 dev tun0 scope link
192.168.11.0/24 dev tun0 scope link
45.211.111.7 dev tun0 scope link
dev
その単語を含む列がdev
並べ替えるように単語ごとに並べ替えたいと思います。
default via 172.20.99.254 dev eth0
87.33.17.71 dev tun0 scope link
89.223.15.12 via 172.20.99.254 dev eth0 src 172.20.99.74
172.20.9.0/24 dev eth0 proto kernel scope link src 172.20.99.74
65.46.5.89 dev tun0 scope link
192.168.11.0/24 dev tun0 scope link
45.211.111.7 dev tun0 scope link
タブが1つ必要な場合もあり、タブが3つ必要な場合もあるため、素朴に拳の空白文字をタブに置き換えることはできません。
答え1
ファイルに存在しないと確信する文字をコマンドのダミー区切り文字として使用しますcolumn
。たとえば、次のようになります。
$ sed 's/dev/@dev/' file | column -ts@
default via 172.20.99.254 dev eth0
87.33.17.71 dev tun0 scope link
89.223.15.12 via 172.20.99.254 dev eth0 src 172.20.99.74
172.20.9.0/24 dev eth0 proto kernel scope link src 172.20.99.74
65.46.5.89 dev tun0 scope link
192.168.11.0/24 dev tun0 scope link
45.211.111.7 dev tun0 scope link
-o
と一緒に(出力区切り記号を指定)を使用することもcolumn
、動作を試すこと-o ""
もできます。-o " "
また、上記はsed
最初の項目のみを置き換え、単純な一致を使用します。周辺空間マッチングのような他のケースでは、より厳しいマッチングが必要になる場合がある。