按字将数据对齐到列中

按字将数据对齐到列中

如何将数据对齐到相对于给定单词的漂亮列中?

例如,我有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仅替换了第一次出现,并使用了简单的匹配,也许您需要对其他情况进行更严格的匹配,例如匹配周围的空格。

相关内容