mor*_*ndg 6 bash awk sed pipe ash
我知道这个问题已经被问到了,但我发现的解决方案没有给我带来帮助!我有一个程序,其输出如下:
COUNT|293|1|lps
Run Code Online (Sandbox Code Playgroud)
我对第二个字段感兴趣但是这些尝试中没有一个有效:
./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'
Run Code Online (Sandbox Code Playgroud)
但输出总是一样的:
COUNT|293|1|lps
Run Code Online (Sandbox Code Playgroud)
bash中某处有错误吗?我会感到惊讶,我的Linux主机和使用busybox灰的嵌入式设备上的结果是一样的!任何指针都非常感谢!
编辑 我的错,输出是stderr ... ._.
./spawn 1 2>&1 | cut -d '|' -f2
4615
Run Code Online (Sandbox Code Playgroud)
抱歉让人心烦!
只是重复我在评论中猜到的答案,现在提问者已经确认这是问题所在.
这里的问题./spawn 1是输出到标准误差,而不是标准输出.您可以使用重定向输出2>&1,因此以下内容应该有效:
./spawn 1 2>&1 | cut -d '|' -f2
Run Code Online (Sandbox Code Playgroud)