【发布时间】:2014-03-15 02:25:24
【问题描述】:
我正在为工作编写一个程序。
它连接到我们的 Sco Unix 服务器并运行一个命令,大部分时间都运行良好
String command = "ps -eo ruser,pid,ppid,stime,etime,tty,args | sort -k4 | grep /PGProcid="+ProcID+"\\ | grep -v grep";
例如,当输出如下所示时
ps -eo ruser,pid,ppid,stime,etime,tty,args | sort -k4 | grep /PGProcid=1\ | grep -v grep
但是,如果我尝试对单个数字(通常为 1 但不限于此)执行此操作,即使我知道结果存在,我也不会得到任何结果。
例如,如果我在服务器上有以下结果
# ps -ef | grep /PGProcid=1
name 29175 29174 0 02:55:57 ttyp15 00:00:00 /xxx/xxx/xxx/prog6 /PGProcid=14
person2 28201 28199 0 01:15:27 ttyp13 00:00:00 /xxx/xxx/xxx/prog1 /PGProcid=1
如果我执行以下操作
# ps -ef | grep /PGProcid=1\
我没有得到任何结果,但我知道有 1 的结果,如果我使用 14 之类的两位数将返回结果,则上述方法将起作用。
我基本上需要能够通过 grep 获取 /PGProcid= 以获取 PID 和 PPID 编号。这似乎只在有 1 & 10,11,12 等或 2 & 20,21,22 等的情况下不起作用。
我尝试过 Egrep,并使用 $,但它似乎总是跳过个位数!
编辑: 这是我在这台服务器上尝试过的
# echo $SHELL
/bin/sh
ps -ef | grep PGProcid=2
amanda 23602 25207 0 09:22:58 ? 00:00:06 /xxxxxx /PGProcid=2
amanda 25207 25203 0 Feb-28 ? 00:00:01 /xxxxxx /PGProcid=2
root 26389 26034 0 05:15:22 ttyp6 00:00:00 grep PGProcid=2
amanda 26042 23602 0 04:46:16 ? 00:00:04 /xxxxxx /PGProcid=2
所以 2 当前在他们的服务器上处于活动状态,但是下面没有结果
# ps -ef | grep /PGProcid=2$
# ps -ef | grep /PGProcid=2\$
# ps -ef | grep "/PGProcid=2$"
下面给出了结果,但也选择了任何带有 2 的东西,所以 22 等等,我只在 2 之后
# ps -ef | grep '/PGProcid=2$'
下面给出错误“没有这样的文件或目录”
# ps -ef | grep `/PGProcid=2$`
【问题讨论】:
-
grep "/PGProcid=1$"对我来说很好。 -
或者,尝试使用
grep /PGProcid=1\$转义$,因为$可能会被您的shell 扩展。 -
另外,人们会指出,最好在Unix Stackexchange 上回答。
-
@fedorqui 你没有忘记尾随的
"(它可以保护$)吗? -
完成了,在 \ 的末尾添加 $ 已经解决了,最后一个小时我一直把头撞在墙上,在谷歌上搜索它,谢谢!