以下を実行する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つの先行スペースがあります。あなたの質問に先行スペースがありますが、これが意図的なものかどうかはわかりません。
答え2
私が作ったパッチフィールドモードで動作し、複数の連続した区切り文字を単一の区切り文字として扱う新しい-m
コマンドラインオプションが追加されました。cut
これは基本的にOPの問題をかなり効率的な方法で解決します。私はまた、このパッチがcoreutilsプロジェクトにマージされることを望み、数日前にこのパッチのアップストリームを送信しました。
いくつかありますもっと考えるスペース関連の機能を追加することについてのフィードバックを持ち、cut
これらすべてにフィードバックを提供することをお勧めします。より多くのパッチを実装し、cut
それをアップストリームに送信してユーティリティをより多様にし、さまざまな実際のシナリオで利用できるようにしたいと思います。