Answers:
column -t -s '\t'
将在\
和t
字符上分隔列。
column -s \t
与相同column -s t
,因为反斜杠被shell解释为引用运算符。
在这里,您要将真实的TAB字符传递给列。使用ksh93,zsh,bash,mksh,busybox sh或FreeBSD sh:
column -ts $'\t'
或通过Ctrl-V Tab在shell提示符下键入来输入真实的制表符(用引号引起来或加反斜杠,因为制表符在外壳程序语法中就像空间一样是令牌分隔符),或使用"$(printf '\t')"
(禁用双引号和glob所需的双引号)运算符,因为制表符也是默认值$IFS
)。
$'\t'
有用-makes选项卡是定界符。但是我很确定我确实awk -F "\t"
使用制表符作为awk的分隔符。为什么这行得通,而不是在专栏里?
对于POSIX,$'...'
未定义ANSI-C转义。
相反,您可以使用$(printf '\t')
:
column -t -s "$(printf '\t')"
$(printf '\011')
可以使用,因为011
(十进制9的八进制表示形式)是水平制表符的ANSI代码:
column -t -s "$(printf '\011')"
但是,请参阅下面的StéphaneChazelas的评论,以了解为什么在各个Shell版本之间可能不一致。
"$(printf '\t')"
如我的答案所示。请注意,$'...'
计划将其包含在POSIX规范的下一个主要版本中。
$(printf '\t')
POSIX吗?谢谢!
column -t -s $'\t'
因为bash似乎认为和都'\t'
意味着,但意味着字面量标签。Bash发臭\
t
$'\t'