我想使用 Unixcolumn
命令来格式化一些文本。我有由制表符分隔的字段,但每个字段内也有空格。column
以空白(制表符和空格)分隔。如何使列仅使用制表符作为分隔符?
我试图使用以下命令指定制表符作为分隔符:
cat myfile | column -t -s"\t"
答案1
列 -t -s '\t'
\
将在和字符上分隔列t
。
与 相同column -s \t
column -s 't'
,因为反斜杠被 shell 解释为引用运算符。
这里你想将一个真正的制表符传递给列。使用 ksh93、zsh、bash、mksh、busybox sh 或 FreeBSD sh:
column -ts $'\t'
或者通过在 shell 提示符下键入来输入真正的制表符Ctrl-V Tab(在引号内或前面加反斜杠,因为制表符是 shell 语法中的标记分隔符,就像空格一样),或者使用"$(printf '\t')"
(禁用 split+glob 所需的双引号)运算符作为制表符也恰好在$IFS
) 的默认值中。
答案2
对于 POSIX,$'...'
未定义 ,即 ANSI-C 转义。
相反,您可以使用POSIX$(printf '\t')
:
column -t -s "$(printf '\t')"
$(printf '\011')
可以使用,因为011
(十进制 9 的八进制表示)是水平制表符的 ANSI 代码:
column -t -s "$(printf '\011')"
然而,这是不鼓励的,因为它是在此评论的以及 Stéphane Chazelas 的回答。这是因为它在 shell 版本之间可能不一致,因为 POSIX 没有指定编码TAB 的值是。仍然有 POSIX 系统的 C 语言环境编码是基于 EBCDIC 的,其中 TAB 是 5,而不是像 ASCII 中的 9。只要有可能,最好按名称引用字符(\t
此处)以避免此类问题。请注意,$'...'
计划包含在 2018 年 9 月 10 日起的 POSIX 规范的下一个主要版本中。
答案3
答案4
用于-t
选择所需的列数。将此留空不会改变任何内容。另外,你想要在之后有空格,-s
所以试试这个:
cat myfile | column -s \t