我无法完全理解命令的-t
参数是如何expand
工作的。以下是其手册页的摘录。
NAME
expand - convert tabs to spaces
...
-t, --tabs=N
have tabs N characters apart, not 8
制表符 N 个字符分开是什么意思?我做了一些测试。
root@u2004:~# printf "a\tb\n"
a b
root@u2004:~# printf "a\tb\n" | od -a
0000000 a ht b nl
0000004
root@u2004:~# printf "a\tb\n" | expand | od -a
0000000 a sp sp sp sp sp sp sp b nl
0000012
root@u2004:~# printf "a\tb\n" | expand -t 4 | od -a
0000000 a sp sp sp b nl
0000006
root@u2004:~# printf "a\tb\n" | expand -t 5 | od -a
0000000 a sp sp sp sp b nl
0000007
root@u2004:~#
如您所见,当我通过时-t 4
,制表符被替换为 3 个空格。所以,实际上,“制表符间隔 4 个字符”只是意味着制表符被替换为 3 个空格?我无法理解。顺便说一句,我不是以英语为母语的人,这可能是一个与英语相关的问题。
它指的是制表位,制表符跳转到的位置。使用
-t 4
,每四个字符有一个制表位。制表符不会插入固定数量的空格,而是跳转到下一个这样的位置,因此添加的空格量取决于制表符之前的文本长度。例如:
当然,重点是让列对齐:
因此,为了尝试在视觉上表示它,制表位的位置是这样的,
^
显示停止:(当然你不能从一开始就使用标签,所以第一个并不真正存在。)
但是,如果一个字段比制表位距离长,那会变得一团糟,但是
expand
将列位置列表作为替代,例如,它有一个四宽的列和一个八宽的列:在那里,停靠点是这样的:
我在那里从零开始编号,以便位置与命令行上给出的数字相匹配。