有人能解释一下为什么这个命令不能打印出不带换行符的PID列表吗?我想要如下输出:
1234 5678 123 456这些我都试过了,没有一个管用。
ps -eww --no-headers -o pid,args | grep 'usr' | awk '{ printf "%d ", $1 }'
ps -eww --no-headers -o pid,args | grep 'usr' | awk '{ printf "%s ", $1 }'
ps -eww --no-headers -o pid,args | grep 'usr' | awk '{ print $1 }' | tr '\n' ''
ps -eww --no-headers -o pid,args | grep 'usr' | awk '{ print $1 }' | tr -d '\n'我刚发现bash工作得很好,但在我的情况下不是zsh。
发布于 2013-02-14 06:08:49
zsh的一个功能是让用户知道最后一个输出行是部分的(即没有最后一个换行符)。有关这方面的更多详细信息,您可以在man zshoptions中查找PROMPT_CR、PROMPT_SP和PROMPT_EOL_MARK。
您可以在~/.zshrc中添加PROMPT_EOL_MARK=''以使部分行指示符为空,但我建议您不要这么做:现在我们知道这只是一个功能,有时如果让它处于启用状态,我们可能会注意到数据出现问题。在功能相当强大的终端上,百分号( PROMPT_EOL_MARK未设置时的默认值)是output inverted,所以它不能与实际输出混淆。
您的命令的输出是一个pids列表,完全符合您的要求。添加最后一个换行符使其在zsh中看起来也正确
ps -eww --no-headers -o pid,args | awk '/usr/ { printf "%d ", $1 } END {print""}'(还使用了另一个答案的想法,即使用awk的力量来摆脱grep )。
发布于 2013-02-14 06:00:32
它对我来说是这样的:
ps -eww --no-headers -o pid,args | awk '/usr/{printf "%d ",$1}'也就是说,awk可以搜索与正则表达式匹配的字符串,因此在使用awk时并不真正需要grep。
https://stackoverflow.com/questions/14863890
复制相似问题