grepping output of ps, exclude the word grep
我正在使用ps查找为执行命令" sleeping 1234&"而创建的进程的pid。
我grep结果只匹配" sleeping 1234"。
1
| ps -A -f | grep"sleep 1234" |
但是,它本身也与命令" grep sleep 1234"匹配,返回两行而不是一行。 如何为grep编写模式以排除单词" grep"本身?
谢谢
-
ps -A -f | grep" sleeping 1234" | grep -v grep
-
@AndreGelinas这里多余的grep是不必要的,您只需要使模式与自身不匹配即可。 请参阅我的答案以获取更多详细信息。
-
pgrep -f sleep 1234
-
@MatthewStory理解并指出了(顺便说一句,这很不错,ILT),但是当为第一个grep使用变量时(事先不知道值)...我发现做第二个grep比进行字符串操作添加要容易 除非我已经误解了。
-
@AndreGelinas带有变量会比较困难,但是OP使用的是文字。
这是一个非常普遍的问题,最简单的解决方案是将grep'ed模式中的字符用方括号括起来:
1
| ps -A -f | grep"[s]leep 1234" |
现在,它将匹配sleep 1234,但不匹配▼显示leep 1234(由于s和l之间的文字]),并且grep行不再匹配。
grep之所以在进程列表中,是因为流水线是从右到左执行的,因此grep实际上是在ps之前执行的。