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'