Sco Unix Grep特定编号(ID)

时间:2014-03-14 15:32:03

标签: java unix grep sco-unix

我正在为工作而写作。

它连接到我们的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这样的两位数,上面的结果会有效。

我基本上需要能够为/ PGProcid = grep获取PID和PPID号码。这似乎只在1& 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$`

1 个答案:

答案 0 :(得分:1)

您的shell将尝试使用环境变量展开$。您必须使用$

保护\
grep /PGProcid=1\$

""

grep "/PGProcid=1$"

编辑: 更准确地说,您应该使用\>来匹配末尾的空字符串。由于shell会解释\>,因此您也应该保护它们:

grep /PGProcid=1\\\>

grep "/PGProcid=1\>"

如果你想要一个“单词匹配”(在我看来),你也可以尝试-w选项:

grep -w /PGProcid=1