如何将数据对齐到相对于给定单词的漂亮列中?
例如,我有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
仅替换了第一次出现,并使用了简单的匹配,也许您需要对其他情况进行更严格的匹配,例如匹配周围的空格。