cutコマンドの区切り文字引数は常に文字列の間にあると思いますか?

cutコマンドの区切り文字引数は常に文字列の間にあると思いますか?

今日、私はcutコマンドで長く使用して使用していたにもかかわらず、以前はまったく気づいていなかったことを発見しました。

/users/developer/文字列から抽出したいですusers。だから私がしたことは、

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

これは私に何の答えも持っていませんでした。私の仮定は区切り文字として指定したので、/区切り文字を見つけた後に最初のフィールドを返す必要があるということです。

少し調整した後、検索コマンドを変更すると、目的の出力が得られることに気づきました。f2

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

これにより、区切り記号が常に期待されると思いました。が左側にあるため、最初のフィールドを検索しようとすると何も返されませんが、2番目のフィールドを検索しようとすると予想される結果が得られます。

論理的にこれはdelimiter。私はこれがcutコマンドの区切り文字パラメータが実際にどのように機能するのか疑問に思います。言い換えれば、私の推論は正しいですか(対応する区切り文字は常に区切り文字の左側に何かを期待しています)

答え1

f1以前のfirstと同様に空です /

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

f1echo "firstと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, 

左、〜サイまたは右 - 空または空ではありません。フィールドはフィールドです。

答え2

ページにはこれを明示的に確認するman内容はありませんが、info

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

これは、最初のフィールドが最初の区切り記号の前にオームを表します(その区切り文字が実際には存在しなくても)。

私にはこれがこのように動作することを疑ったことはありませんが、これが必要な答えではないかもしれません;-).

答え3

定義は明確なようです。見ている区切り記号に関するウィキペディア記事

区切り文字は、プレーンテキストまたは他のデータストリーム内の別個の独立領域間の境界を指定する1つ以上の文字列である。1区切り文字の例には、カンマ区切り値シーケンス内のフィールド区切り文字として機能するコンマ文字があります。

区切り文字は、データストリームの境界を指定するさまざまな方法の1つを表します。たとえば、宣言表記は、データストリームの先頭にある長さフィールドを使用して、データストリームに含まれる文字数を指定する代替方法です。

最初の文は、「...分離された独立した領域間の境界を指定します...」と示しています。私はこれがあなたが推論したものとまったく一致すると思います。

関連情報