2012-03-07 62 views
1

我努力调整自己的正则表达式来过滤掉PCRE正则表达式匹配的文本,除了字组

  • rlwrap
  • 庆典

来自:

cat file 
user 30300 29384 0 Mar05 pts/4 00:00:00 /opt/bin/rlwrap /opt/test/l64/app apps/bin -gw :1234 -p 10006 
user 30301 30300 0 Mar05 pts/5 00:00:00 /opt/test/l64/app apps/bin -gw :1234 -p 10006 
user 30300 29384 0 Mar05 pts/4 00:00:00 /opt/bin/bash /opt/test/l64/app apps/bin -gw :1234 -p 10006 

所以我只需要得到第二排:

grep -P 'regex' file 
user 30301 30300 0 Mar05 pts/5 00:00:00 /opt/test/l64/app apps/bin -gw :1234 -p 10006 

我有什么是:

grep -P '((?:(?!rlwrap\b|bash\b).)*?)-p 10006$' file 

但它不工作:(

我只需要PCRE正则表达式,我需要它的工作withing这个的grep -P声明。
所以请不要awk,perl,sed,grep -v或类似的东西。

编辑
我真的好奇为什么有人反对这个问题?

+0

你为什么不能做多遍用'grep',使用'-v'在以后的调用? – beerbajay 2012-03-07 14:12:30

+0

因为将使用此正则表达式的应用程序不是调用其他应用程序并将PCRE正则表达式作为正则表达式匹配的应用程序 – bua 2012-03-07 14:13:58

回答

2

这会发现,不包含后面有一个空格/rlwrap/bash所有行:

grep -P '^(?!.*/(rlwrap|bash))' file 
+0

完美! '^'完成了这个诀窍: '^(!!。* /(rlwrap \ b | bash \ b))。* - p 10006 $' – bua 2012-03-07 14:53:41