0

有人可以解释为什么这个命令不打印没有换行符的 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

4

2 回答 2

2

zsh具有让用户知道最后一个输出行是部分输出的功能(即没有最后的换行符)。PROMPT_CR有关这方面的更多详细信息,您可以查找PROMPT_SPPROMPT_EOL_MARKman zshoptions.

您可以添加PROMPT_EOL_MARK=''到您~/.zshrc的部分以使部分行指示器为空,但我建议不要这样做:现在我们知道它只是一个功能,有时如果我们启用它,我们会注意到我们的数据存在问题。在相当强大的终端上,百分号(未设置时的默认值PROMPT_EOL_MARK)以粗体和反转输出,因此不会与实际输出混淆。

您的命令输出是完全符合您要求的 pid 列表。添加最后一个换行符使它看起来正确zsh

ps -eww --no-headers -o pid,args | awk '/usr/ { printf "%d ", $1 } END {print""}'

(也使用另一个答案的想法摆脱grep使用的力量awk)。

于 2013-02-13T22:08:48.980 回答
1

它对我来说是这样的:

ps -eww --no-headers -o pid,args | awk '/usr/{printf "%d ",$1}'

即可以搜索匹配正则表达式的字符串,所以在使用的时候awk并不需要。grepawk

于 2013-02-13T22:00:31.830 回答