grep环顾四周不匹配

时间:2014-05-09 01:12:25

标签: regex grep

我被告知grep有外观支持。我试图在答案中用grep排除这一行,因为很明显这通常会在那里。我只想检查我的mysqld服务器基本上是否正常运行。

我正在尝试的正则表达式:

^(?!.*grep)(?=.*mysql).*

命令行。我试图匹配的顶线,我试图排除的底线。

root:~# ps aux | grep mysqld_safe
root     28012  0.0  0.1   4408   712 pts/0    S    18:00   0:00 /bin/sh /usr/bin/mysqld_safe
root     29167  0.0  0.1   9392   900 pts/1    S+   20:51   0:00 grep --color=auto mysqld_safe

这是我的疑问:

http://regex101.com/r/qK3cI5

# ps aux | grep '^(?!.*grep)(?=.*mysql).*'
(nothing)

3 个答案:

答案 0 :(得分:2)

  • 使用向前/向后看你需要为你的grep添加-P选项(如果你的grep支持它)。因为PCRE支持他们。

  • 在grep ps输出时有一个常见的技巧,但想要排除grep进程本身,例如:

    ps -ef|grep [m]ysql
    

ps aux|grep [m]ysql

答案 1 :(得分:2)

就个人而言,我会选择

ps aux | grep -v grep | grep mysql

在#34; greping"之前排除了包含 grep 的行。对于 mysql

答案 2 :(得分:1)

您可以尝试awk

ps aux | grep mysqld_safe | awk '$12~"--color=auto" {next;} {print;}'

OR

ps aux | grep -oP '^(?!.*grep)(?=.*mysql).*'