Grep
為什麼 cut -d ’ ’ 在這種情況下不適用於空格?
我對這個
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 手冊不得不說欄位分隔符。