gpt4 book ai didi

linux - grep '[p]rocessname' 如何忽略 'grep' 中的 'ps -ef' 进程?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:53:23 26 4
gpt4 key购买 nike

当我试图通过使用 ps -ef | 找出具体进程时grep 'processname',它也提供 grep 进程。

像这样:

$ ps -ef | grep 'sleep'
root 25309 16242 0 18:08 pts/17 00:00:00 sleep 300
root 25316 6114 0 18:08 pts/2 00:00:00 grep --color=always sleep

为此,我通常使用 ps -ef | grep '[p]processname' 许多网站和 SO 中的链接都建议这样做。现在,我得到了预期的输出。

$ ps -ef | grep '[s]leep'
root 25309 16242 0 18:08 pts/17 00:00:00 sleep 300

我的问题是,

grep '[p]rocessname' 如何忽略 grep 进程?

因为,当我将输出重定向到某个文件并执行 grep 时。但是,这次它给了我两条线。我有点迷惑不解了。在这里,我已经尝试过。

$ ps -ef | grep 'sleep' > input.txt

$ grep 'sleep' input.txt
root 25309 16242 0 18:08 pts/17 00:00:00 sleep 300
root 25689 6114 0 18:11 pts/2 00:00:00 grep --color=always sleep

$ grep '[s]leep' input.txt
root 25309 16242 0 18:08 pts/17 00:00:00 sleep 300
root 25689 6114 0 18:11 pts/2 00:00:00 grep --color=always sleep

$ cat input.txt | grep '[s]leep'
root 25309 16242 0 18:08 pts/17 00:00:00 sleep 300
root 25689 6114 0 18:11 pts/2 00:00:00 grep --color=always sleep

ps -ef | 有什么区别? grep '...'grep '...' 文件 ?

最佳答案

这是一个简单的技巧。

假设您的机器上只有两个 java 进程在运行,没有其他进程。使用 ps -ef|grep java,您有 3 个进程

java ...
java ...
grep java

并且您的 grep 为您提供了 3 行输出。因为三行匹配正则表达式:java

但如果您使用 grep '[j]ava' 执行此操作,您将拥有以下 3 个进程:

java...
java...
grep [j]ava

最后一行不匹配正则表达式 [j]ava,它匹配 \[j\]ava,这就是为什么你的 grep '[j] ava' 过滤掉最后一个进程,因此只有 2 个输出

关于linux - grep '[p]rocessname' 如何忽略 'grep' 中的 'ps -ef' 进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25405108/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com