# 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
那么\$
意味着什么?这是正则表达式吗?
答案 0 :(得分:1)
是的,这是一个正则表达式。 $
是一个正则表达式字符,表示“行尾”。所以,通过说grep safe\$
,您grep
ping所有名称以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
有趣的情况是,如果您使用-F
中的grep
选项,它将匹配完全字符串,因此您将获得的唯一输出是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"
的人。