我有命令:
ps -ef | grep kde | tr -s ' ' '@'
我得到这样的输出:
user2131@1626@1584@0@15:50@?@00:00:00@/bin/sh@/usr/bin/startkdeere
如何使用 linux 或 awk 等其他工具获取仅用于列分隔的 @ 符号?
最佳答案
使用 pgrep
来获取 PID,而不是使用 ps
。 pgrep
将消除 grep 问题,即您发现的进程之一是 grep
进行过滤。
您还可以使用-o
或-O
选项指定ps
命令本身的输出。您可以执行此操作来获取所需的字段,并消除 header 。
您还可以使用 read 命令来解析您的输出。唯一可能有空格的字段是最后一个字段——命令和参数。
ps -o uid= -o gid= -o tty= -o args= -p $(pgrep kde) | while read uid gid tty cmd
do
echo "UID = $uid PID = $pid TTY = $tty"
echo "Command = $cmd"
done
while
将按空格分割,但 $cmd
除外,它将包含所有剩余字段(即带有参数的整个命令)。
ps
命令因平台而异,因此请阅读 ps
上的联机帮助页。
关于linux - 如何在 ps -ef 命令中分隔列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18788054/