Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Sco Unix Grep特定号码(ID)_Java_Unix_Grep_Sco Unix - Fatal编程技术网

Java Sco Unix Grep特定号码(ID)

Java Sco Unix Grep特定号码(ID),java,unix,grep,sco-unix,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 /PGPro

我有一个为工作而写的程序

它连接到我们的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$'
下面给出了一个错误“没有这样的文件或目录”


您的shell将尝试使用环境变量展开
$
。您必须使用
\
保护它:

grep /PGProcid=1\$

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

grep /PGProcid=1\\\>

如果您想进行“单词匹配”(在我看来),也可以尝试
-w
选项:

grep -w /PGProcid=1

grep/PGProcid=1$”
对我来说很好。或者,试着用
grep/PGProcid=1\$
来逃逸
$
,因为
$
可能会被你的shell扩展。另外,人们会指出这会更好地回答。@fedorqui你忘了后面的
(这将保护
$
)?完成了,在\的末尾加上$解决了问题,在过去的一个小时里我的头撞在墙上用谷歌搜索了一下,谢谢!这并没有按计划进行。这似乎在那个服务器上起了作用,但是另一台服务器现在没有给我任何结果,相同的grep行个位数确实存在,但行没有选择它up@ChristopherLewis是使用相同shell的另一台服务器(即都使用bash、ksh等等)?您可能希望尝试单引号
而不是双引号
因为单引号不会扩展任何内容。它们似乎运行不同的shell,一个使用/usr/bin/bash,另一个使用/bin/sh。我想我的选项是编辑服务器上的配置文件,以便所有shell匹配,或者尝试找到一些共同点?@ChristopherLewis使用相同的shell会更容易,因为您可以使用sam但是,如果不可能的话,请尝试使用简单的引号
。很抱歉,从我的评论中删除了该回复。我尝试了单引号,但它不喜欢那些没有结果的脚本,如果我能找到一种方法让它在/usr/bin/bash上工作,我可以添加一个检查,查看服务器运行了什么shell并执行不同的com曼德
grep /PGProcid=1\\\>
grep "/PGProcid=1\>"
grep -w /PGProcid=1