`pr -e` 是什么意思?

`pr -e` 是什么意思?

来自 coreutils 的手册pr

‘-e[in-tabchar[in-tabwidth]]’
‘--expand-tabs[=in-tabchar[in-tabwidth]]’

将制表符扩展到输入上的空格。可选参数 in-tabchar 是输入制表符(默认为 TAB 字符)。第二个可选参数 in-tabwidth 是输入制表符的宽度(默认为 8)。

是否意味着用多个空格-e[in-tabchar[in-tabwidth]]替换每个?in-tabcharin-tabwidth

在下面的两个示例中,为什么abc之间被一个空格分隔,而第一个示例中1和被三个空格分隔,而第二个示例中 和 被两个空格分隔?3谢谢。

$ printf "a:b:c\n1::3\n" | pr -t -e:2
a b c
1   3

$ printf "a:b:c\n1::3\n" | pr -t -e:1
a b c
1  3

答案1

pr -e与命令执行相同的工作expand。它以与终端模拟器通常类似的方式扩展选项卡。 TAB 是一个控制字符,终端将其理解为将光标移动到下一个制表位,它用于表格格式和对齐。

在大多数终端上,默认情况下,制表位每 8 列一次。因此,向它们发送 TAB 与发送 1 到 8 之间的多个空格具有相同的效果,具体取决于当前光标位置:

 $ printf '%b\n' 'a\tb' 'abcde\tg'
 a       b
 abcde   g

第一个选项卡将光标向右移动 7 列,第二个选项卡向右移动 3 列。

pr -e将根据需要用尽可能多的空格替换它们\t以达到相同的效果:

$ printf 'abcde\tg\n' | sed l
abcde\tg$
abcde   g
$ printf 'abcde\tg\n' | pr -te | sed l
abcde   g$
abcde   g

请注意,GNUpr具有与 GNU 相同的限制,expand即它假定所有字符均由一个字节组成并占用一列来显示。

相关内容