区切り文字が複数の空白の場合、カットを使用すると単語分割が実行されます。

区切り文字が複数の空白の場合、カットを使用すると単語分割が実行されます。

以下を実行するbashスクリプトを実行しています。

cut -d ' ' -f2 <<< "aaa bbb"

答えを得ました:

bbb

区切り文字で複数の空白がある場合(例:3つ):

cut -d ' ' -f2 <<< "aaa   bbb"

結果:

 bbb

これは Debian 8 で実行されます。

debian 10で実行されているのと同じスクリプトは別の出力を生成します。

区切り文字で複数の空白がある場合(例:3つ):

cut -d ' ' -f2 <<< "aaa   bbb"

結果は空白だけ""です。

私はDebian 8からDebian 10と同じ動作をしたいと思います。どんなアイデアがありますか?

(わかりました。tr -sを使用して3つのスペースを削除できますが、動作が異なる理由を理解したいと思います。)

ありがとう、ジョス

ベストアンサー1

cut私は最近の行動がそのような変化を受ける資格がないと思います。また、Debian 8.11 と GNU coreutils 8.23 を使用してcut状況を再現することはできません。

cutただし、パラメータにダッシュを付けると、-f 2-フィールド2から始まるすべてのフィールドが取得されます。私はこれがあなたが説明するものと密接に一致していると思います。

$ cut -d ' ' -f2- <<< "aaa   bbb"
  bbb

出力には、bbbフィールド2(空)、3(空)、および4()の間のフィールド区切り文字である2つの先行スペースがあります。あなたの質問に先行スペースがありますが、これが意図的なものかどうかはわかりません。

おすすめ記事