ps | 之间的差异grep 安全和 ps | grep 安全\$

Difference between ps | grep safe and ps | grep safe\$

# ps  | grep safe
14592 root      136m S    /tmp/data/safe/safe
16210 root      1664 S    grep safe

# ps  | grep safe$
14592 root      258m S    /tmp/data/safe/safe

那么$是什么意思呢?是正则表达式吗?

是的,它是一个正则表达式。 $ 是一个正则表达式字符,表示 "end of line"。因此,通过说 grep safe$,您 grepping 所有名称以 safe 结尾的行,并避免 grep 本身成为输出的一部分。

这里的事情是,如果你 运行 ps 命令和 grep 它的输出, grep 本身将被列出:

$ ps -ef | grep bash
me       30683  9114  0 10:25 pts/5    00:00:00 bash
me       30722  8859  0 10:33 pts/3    00:00:00 grep bash

因此,通过说 grep safe$ 或等效的 grep "safe$",您在匹配中添加了一个正则表达式,这将使 grep 本身不显示。

$ ps -ef | grep "bash$"
me       30683  9114  0 10:25 pts/5    00:00:00 bash

有趣的是,如果您在 grep 中使用 -F 选项,它将匹配精确的字符串,因此您将获得的唯一输出是 grep 本身:

$ ps -ef | grep -F "bash$"
me       30722  8859  0 10:33 pts/3    00:00:00 grep -F bash$

执行此操作的典型技巧是 grep -v grep,但您可以在 More elegant "ps aux | grep -v grep" 中找到其他技巧。我喜欢写 ps -ef | grep "[b]ash".

的那个