【问题标题】:Sco Unix Grep Specific Number (ID)Sco Unix Grep 特定编号 (ID)
【发布时间】: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 你没有忘记尾随的"(它可以保护$)吗?
  • 完成了,在 \ 的末尾添加 $ 已经解决了,最后一个小时我一直把头撞在墙上,在谷歌上搜索它,谢谢!

标签: java unix grep sco-unix


【解决方案1】:

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

grep /PGProcid=1\$

"":

grep "/PGProcid=1$"

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

grep /PGProcid=1\\\>

grep "/PGProcid=1\>"

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

grep -w /PGProcid=1

【讨论】:

  • 这并没有按计划进行。这似乎在该服务器上工作,但是另一台服务器现在没有给我任何结果 grep 行单个数字确实存在,但该行没有捡起它
  • @ChristopherLewis 是使用相同外壳的另一台服务器(即都使用 bash、ksh、...)?您可能想尝试使用单引号 ' 而不是双引号 ",因为单引号不会扩展任何内容。
  • 他们似乎在运行不同的 shell,一个使用 /usr/bin/bash 另一个使用 /bin/sh 我想我的选项是编辑服务器上的配置文件,以便所有 shell 匹配,或者试图找到一些共同点?
  • @ChristopherLewis 使用相同的 shell 对您来说会更容易,因为您可以在任何地方使用相同的脚本。但是,如果不可能,请尝试使用简单的引号 '
  • 抱歉,我从我的评论中删除了该回复bash 我可以添加检查以查看服务器运行的 shell 并执行不同的命令
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-05
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
  • 2013-10-13
  • 2010-12-13
  • 1970-01-01
相关资源
最近更新 更多