jny*_*len 3 linux shell sed text-alignment
我有一个基本上运行的脚本tmux ls:
session1: 3 windows (created Fri Sep 20 13:16:13 2013) [157x56]
stuff: 3 windows (created Fri Sep 20 13:25:21 2013) [157x56]
asdf: 2 windows (created Sun Sep 29 23:06:33 2013) [77x17] (attached)
website: 1 windows (created Tue Sep 24 17:22:14 2013) [157x26]
Run Code Online (Sandbox Code Playgroud)
我希望该脚本的输出在冒号处对齐,以提高可读性。我知道如何使用,column -t但它并不能完全满足我的要求(请注意双倍间距,并且冒号实际上并未对齐):
session1: 3 windows (created Fri Sep 20 13:16:13 2013) [157x56]
stuff: 3 windows (created Fri Sep 20 13:25:21 2013) [157x56]
asdf: 2 windows (created Sun Sep 29 23:06:33 2013) [77x17] (attached)
website: 1 windows (created Tue Sep 24 17:22:14 2013) [157x26]
Run Code Online (Sandbox Code Playgroud)
这是我真正想要的输出:
session1 : 3 windows (created Fri Sep 20 13:16:13 2013) [157x56]
stuff : 3 windows (created Fri Sep 20 13:25:21 2013) [157x56]
asdf : 2 windows (created Sun Sep 29 23:06:33 2013) [77x17] (attached)
website : 1 windows (created Tue Sep 24 17:22:14 2013) [157x26]
Run Code Online (Sandbox Code Playgroud)
在 Linux shell 中实现此目的最简单/最好的方法是什么?
编辑:如果您想测试您的答案,可以使用curl -s nylen.tv/tmux.txt代替tmux ls。
您GNU sed可以指定匹配的出现位置,以便s/ +/ /g在整个文件中使用单空格s/ +/ /2g,但在每行的第二个匹配之后:
$ column -t file | sed -re 's/: ( +)/\1: /' -e 's/ +/ /2g'
session1 : 3 windows (created Fri Sep 20 13:16:13 2013) [157x56]
stuff : 3 windows (created Fri Sep 20 13:25:21 2013) [157x56]
asdf : 2 windows (created Sun Sep 29 23:06:33 2013) [77x17] (attached)
website : 1 windows (created Tue Sep 24 17:22:14 2013) [157x26]
Run Code Online (Sandbox Code Playgroud)
为了排序第一列间距,我们使用s/: ( +)/\1: /匹配所有空格,:并将 n-1 个空格存储在第一个捕获组中。然后,我们将 和 所有空格替换:为 n-1 个空格,后跟 a,:后跟一个空格(再次形成 n 个总空格)。
| 归档时间: |
|
| 查看次数: |
2170 次 |
| 最近记录: |