Grep

為什麼 cut -d ’ ’ 在這種情況下不適用於空格?

  • August 27, 2020

我對這個cut命令沒有意見。

wolf@linux:~$ echo ab cd ef
ab cd ef

wolf@linux:~$ echo ab cd ef | cut -d ' ' -f 1
ab

wolf@linux:~$ echo ab cd ef | cut -d ' ' -f 2
cd

但是,當我用這樣的不同輸入嘗試相同的命令時,我沒有得到預期的輸出。

wolf@linux:~$ ip address show eth0 | grep 'inet '
   inet 10.10.10.10/24 brd 10.10.10.255 scope global dynamic eth0

wolf@linux:~$ ip address show eth0 | grep 'inet ' | cut -d ' ' -f 1

wolf@linux:~$ ip address show eth0 | grep 'inet ' | cut -d ' ' -f 2

第二個例子有什麼問題?

awk相同的輸入似乎沒有問題,奇怪。

wolf@linux:~$ ip address show eth0 | awk '/inet / {print $1}'
inet

wolf@linux:~$ ip address show eth0 | awk '/inet / {print $2}'
10.10.10.10/24

cut即使有連續的空格,也將每個分隔符都視為有意義的。這與awk預設情況下在空格上拆分,但將多個空格作為一個分隔符不同,並忽略前導空格。

您可以通過將欄位分隔符設置為 awk 來表現FS類似[ ]

$ ip add show lo | awk -F'[ ]' '$5 == "inet" {print $6}'
127.0.0.1/8

必須像這樣設置,作為正則表達式,因為單個空格本身FS標記預設的特殊操作。

參見,例如 GNU awk 手冊不得不說欄位分隔符

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