2012-03-07 1 views
1

Я изо всех сил, чтобы настроить свой регулярное выражение, чтобы отфильтроватьPCRE регулярное выражение для сопоставления текста, за исключением группы слов

  • rlwrap
  • BASh

от:

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 регулярное выражение, мне нужно, чтобы сделать его работу жгутов этот Grep -p заявление.
Так что, пожалуйста, не awk, perl, sed, grep -v или подобное.

EDIT
Я действительно интересно, почему кто-то вниз проголосовали этот вопрос?

+0

Почему вы не можете сделать несколько проходов с 'grep', используя' -V' на более поздний вызов ? – beerbajay

+0

Поскольку приложение, которое будет использовать это регулярное выражение, не является приложением, которое вызывает другие приложения и принимает регулярное выражение PCRE как регулярное выражение для соответствия – bua

ответ

2

Найдет все строки, которые не содержат /rlwrap или /bash с последующим пробелом:

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

Perfect! '^' сделал трюк, с которым я столкнулся: '^ (?!. */(rlwrap \ b | bash \ b)). * - p 10006 $' – bua

 Смежные вопросы

  • Нет связанных вопросов^_^