关于bash:如何使用管道字符分隔符分隔字段

How to separate fields with pipe character delimiter

我知道这个问题已经被问过了,但是我发现的解决方案都没有对我有用!我有一个输出如下的程序:

1
COUNT|293|1|lps

我对第二个领域很感兴趣,但是这些尝试都没有奏效:

1
2
3
4
5
6
./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'

但是输出总是相同的:

1
COUNT|293|1|lps

巴什有虫子吗?我会很惊讶,在我的Linux主机和使用busybox's ash的嵌入式设备上,结果是一样的!任何指针都非常感谢!

编辑我的错,输出在stderr中…。

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

对不起,太累了!


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

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

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


1
2
$ echo 'COUNT|293|1|lps' | cut -d'|' -f2
293

它在这里工作。