我知道已经有人问过这个问题,但我找到的解决方案都没有对我有用!我有一个程序,它有这样的输出:

COUNT|293|1|lps

我对第二个领域很感兴趣,但是这些尝试都没有奏效:
./spawn 1 | cut -d '|' -f2
./spawn 1 | cut -d \| -f2
./spawn 1 | awk -F "|" '{print $2}'
./spawn 1 | awk 'BEGIN{FS="|"} {print $2}'
./spawn 1 | sed 's/|/;/g'
./spawn 1 | sed 's/\|/;/g'

但输出总是相同的:
COUNT|293|1|lps

bash 中的某个地方是否存在错误?我会感到惊讶,结果在我的 Linux 主机和使用 busybox 的 ash 的嵌入式设备上是一样的!强烈感谢任何指针!

编辑
我的错,输出在 stderr ... ._。
./spawn 1 2>&1 | cut -d '|' -f2
4615

抱歉打扰了!

最佳答案

只是重复我在评论中的猜测作为答案,现在提问者已经确认这是问题所在。

这里的问题是 ./spawn 1 输出到标准错误,而不是标准输出。您可以使用 2>&1 重定向输出,因此以下内容应该有效:

./spawn 1 2>&1 | cut -d '|' -f2

关于bash - 如何使用管道字符分隔符分隔字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9018691/

10-10 17:45