Text-Processing
“column”命令的預設 -s 選項如何工作?如何通過手動傳遞一些值來模仿預設的 -s 選項?
該
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
對於漂亮的列印,產生一個類似選項卡的輸出,其中不包含選項卡,但只有空格。