为何grep中使用\b元字符可以排除自身进程?
为啥
ps aux | grep "\bnode example.js"只显示目标node进程? 先说说普通grep命令为啥会带出自身进程
当你跑ps aux | grep "node example.js"时:
ps aux会列出系统所有进程,包括你要找的node example.js。- 这条命令同时会启动一个grep进程,它的命令行参数就是
node example.js,所以这个grep进程的命令行里本身就包含node example.js这串字符。 - grep的工作就是搜索包含指定字符串的行,自然会把自己也搜出来,结果里就会有两个进程条目。
\b是关键:正则里的单词边界
\b是正则表达式里的单词边界,它匹配的是「单词字符(字母、数字、下划线)」和「非单词字符(空格、标点、符号之类)」之间的位置。
放到这个场景里看:
- 你要找的
node example.js进程,命令行里的node是个独立单词,前后都是空格(非单词字符),所以node开头的位置(空格和n之间)正好符合\b的匹配要求,\bnode example.js能精准命中这个进程。 - 而grep自己的进程呢?它的命令行里
node前面要么是\b这两个字符(比如你用引号把参数包起来时,ps会显示grep \bnode example.js),要么是被shell解析后的特殊字符,这就导致node的开头位置不是合法的单词边界——要么是符号直接跟在n前面,要么node不是作为独立单词开头,所以grep搜不到自己。
这样一来,结果里就只剩目标的node进程了。
内容的提问来源于stack exchange,提问作者tlama
相关产品推荐
相关产品推荐

