奇怪的剪切行为

奇怪的剪切行为

我在用着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

打印出 42;不只是 2。我确实在该剪切上运行了 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 的实现;重建基本上所有的东西可能是谨慎的做法。

相关内容