奇妙なせん断動作

奇妙なせん断動作

私はそれを使用していますcut (GNU coreutils) 8.24

コマンド:echo "TEST=test" | cut -d"=" -f2-出力Ttest。これは予想される動作ではないようです。

私が間違って使ったのか、それとも何か問題があるのでしょうかcut

答え1

レプリケーションの問題はlibcプロバイダによって引き起こされます。つまり、これはuclibcのバグのようです。https://bugs.busybox.net/show_bug.cgi?id=4099

場合によっては、フィールド 2 を印刷するように指示されると、cut はフィールド 1 の最初の文字とフィールド 2 のすべての文字を印刷します。たとえば、次のようになります。

printf "4123\t2\t3\t4\t5\n" | cut -f 2

2ではなく42を印刷します。私はそのカットに対してstraceを実行し、カットがライン全体を印刷していることを示しました。

このバグは、区切り文字なしで行を処理する方法に関連しているようです。したがって、現在の回避策は、次のように「-s」フラグを使用することです。

printf "4123\t2\t3\t4\t5\n" | cut -f 2 -s

予想通り「2」が印刷されます。

このような状況にあるほとんどの人はbuildrootを使用していると思います。そのリンクに沿ってuclibcの設定を変更することをお勧めします。主にこれは次のことを意味します。

make uclibc-menuconfig
Select y for 'String and Stdio Support --> Provide a macro version of [getc|putc]'

これはlibcの実装を変更することに注意してください。デフォルトでは、すべてを再構築するのが賢明かもしれません。

関連情報