Cut

cut 命令上的分隔符參數是否總是希望它位於字元串之間?

  • May 11, 2013

cut今天注意到命令的一些東西,不知何故我以前從未註意到,即使我已經使用和使用它們很長時間了。

從字元串/users/developer/中,我想提取users. 所以,我所做的是,

echo `pwd` | cut -d '/' -f1

這並沒有給我任何回報。我的假設是,由於我已指定/為分隔符,它應該在找到分隔符後返回給我的第一個欄位。

經過一些調整,我意識到我可以得到我想要的輸出,當我改變我的命令來檢索f2

echo `pwd` | cut -d '/' -f2

它讓我想到,分隔符總是希望在它的左側有一些東西,這就是為什麼在嘗試檢索第一個欄位時,它沒有返回任何東西,當我嘗試檢索第二個欄位時,我得到了我所期待的。

從邏輯上講,它對delimiter. 我只是想知道,delimiter 參數在 cut 命令中真的是這樣工作的嗎?換句話說,我的推斷是否正確(分隔符總是希望某些東西在分隔符的左側)

f1是空的,就像 first 之前的一樣 /

echo "/some/path/to/some/location" | cut -d '/' -f1
     |
     +--- empty

f1是介於echo "和 first之間的內容/


換句話說:空不是不存在的。或者一個字元串/欄位可以沒有字元,如"".

例如,如果您查看以下內容,可能會更清楚:

[In Data]   [Output fields]
            1  2  3  4  5 -f
A:B::D:E  => A, B,  , D, E
A::C:D:E  => A,  , C, D, E
:B:C:D:   =>  , B, C, D, 

左側、中間或右側 - 是否為空。一個領域就是一個領域。

man頁面中沒有任何內容,也沒有info明確證實這一點,但是

  -f, --fields=LIST
         select only these fields;  also print any line that contains no delimiter character, unless the -s option is specified

這表明第一個欄位在第一個分隔符之前(即使該分隔符實際上不存在)。

對我來說,我從來沒有懷疑它是這樣工作的,但這可能不是你需要的答案;-)。

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