私はそれを使用しています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の実装を変更することに注意してください。デフォルトでは、すべてを再構築するのが賢明かもしれません。