我在用着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 的实现;重建基本上所有的东西可能是谨慎的做法。