该column
命令的手册页描述了这样的-s
选项:
-s, --separator separators
Specify the possible input item delimiters (default is whitespace).
默认情况下,它说的-s
是 whitespace。我做了一些测试:
[root@192 ~]# awk 'substr($0,1,1)=="U"' /etc/fstab
UUID=75278d9c-4f90-4597-93d9-471186f5c1e7 / xfs defaults 0 0
UUID=8d7fa4f2-9852-41d7-9bf7-5f578895a5be /boot xfs defaults 0 0
UUID=11c7f961-4859-46e9-aa60-8110cf01ee0e none swap defaults 0 0
[root@192 ~]# awk 'substr($0,1,1)=="U"' /etc/fstab | column -t
UUID=75278d9c-4f90-4597-93d9-471186f5c1e7 / xfs defaults 0 0
UUID=8d7fa4f2-9852-41d7-9bf7-5f578895a5be /boot xfs defaults 0 0
UUID=11c7f961-4859-46e9-aa60-8110cf01ee0e none swap defaults 0 0
[root@192 ~]# awk 'substr($0,1,1)=="U"' /etc/fstab | column -to"|"
UUID=75278d9c-4f90-4597-93d9-471186f5c1e7|/ |xfs |defaults|0|0
UUID=8d7fa4f2-9852-41d7-9bf7-5f578895a5be|/boot|xfs |defaults|0|0
UUID=11c7f961-4859-46e9-aa60-8110cf01ee0e|none |swap|defaults|0|0
[root@192 ~]#
如果我添加 的“默认值” -s
,我会得到:
[root@192 ~]# awk 'substr($0,1,1)=="U"' /etc/fstab | column -to"|" -s " "
UUID=75278d9c-4f90-4597-93d9-471186f5c1e7|/ ||||||||||||||||||| | |||xfs| ||||defaults|||| | |||0|0
UUID=8d7fa4f2-9852-41d7-9bf7-5f578895a5be|/boot|||||||||||||||||||xfs| ||| |defaults|||| ||||0|0||| |
UUID=11c7f961-4859-46e9-aa60-8110cf01ee0e|none ||||||||||||||||||| |swap||| |defaults|||| ||||0|0||| |
[root@192 ~]#
为什么会这样?我期待它产生与awk 'substr($0,1,1)=="U"' /etc/fstab | column -to"|"
. 我也尝试给出诸如, , ,之类的-s
值,但都未能产生由.[:space:]+
[[:space:]]+
\s+
+
awk 'substr($0,1,1)=="U"' /etc/fstab | column -to"|"
我的问题是,如果我必须手动指定 的值-s
,我应该给它什么值才能产生与 相同的结果awk 'substr($0,1,1)=="U"' /etc/fstab | column -to"|"
?基本上,请帮我填空:
[root@192 ~]# awk 'substr($0,1,1)=="U"' /etc/fstab | column -to"|" -s <fill_your_answer_here>
UUID=75278d9c-4f90-4597-93d9-471186f5c1e7|/ |xfs |defaults|0|0
UUID=8d7fa4f2-9852-41d7-9bf7-5f578895a5be|/boot|xfs |defaults|0|0
UUID=11c7f961-4859-46e9-aa60-8110cf01ee0e|none |swap|defaults|0|0
[root@192 ~]#
-s " "
将输入分隔符设置为一个字符,即空格。默认值为whitespace,它不是一个字符,它是空白字符的集合(我们可以称之为元字符)。一系列空白字符也被视为一个分隔符。
因此,如果没有
-s
, 在默认行为期间,单词之间的制表符、空格或一系列它们被视为一个分隔符。但是当使用 时-s " "
,即使两个空格一起被认为是两个分隔符,它们之间有一个空字段。从这里开始:空格——这是一个制表符、换行符、垂直制表符、换页、回车或空格。Bash 使用空格来确定单词的开始和结束位置。
您不能通过设置
-s
字符列表来模仿默认行为,一系列空白字符将被视为多个分隔符,而不是一个。同样
-t
对于漂亮的打印,产生一个类似选项卡的输出,其中不包含选项卡,但只有空格。