Text-Processing

“column”命令的預設 -s 選項如何工作?如何通過手動傳遞一些值來模仿預設的 -s 選項?

  • April 17, 2022

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對於漂亮的列印,產生一個類似選項卡的輸出,其中不包含選項卡,但只有空格。

引用自:https://unix.stackexchange.com/questions/699300