Логические операторы, использующие egrep - PullRequest
0 голосов
/ 29 января 2012

Как мне использовать сложные логические операции с egrep?

Я могу просто сделать, "egrep -v C abc.txt", чтобы реализовать не C и найти это в abc.txt.

Я могу сделать «egrep A. * B abc.txt» для реализации и A и C, чтобы найти это в abc.txt.

Но как мне сделать что-то вроде,

А И Б (НЕ С)

Я погуглил, но не смог найти работающего решения.

Любая помощь очень ценится!

Ответы [ 3 ]

1 голос
/ 29 января 2012

Я могу сделать «egrep A. * B abc.txt» для реализации и A и C, чтобы найти это в abc.txt.

1 - вашей команде нечегоделать с "С", это может быть опечатка.

2- "A. * B" - это не A и B.Например, строка «BfooA» также является A и B, но не будет соответствовать вашему регулярному выражению.

A и B (не C) могут быть преобразованы в:

egrep A abc.txt|egrep B|egrep -v C
0 голосов
/ 29 января 2012

Самый простой способ - передать вывод одного grep на вход другого:

egrep A.*B <file> | egrep -v C

Имейте в виду, это больше "A, чем B", чем "A и B".».Если вам нужна более сложная логика сопоставления, я предлагаю вам проверить awk.

0 голосов
/ 29 января 2012

Простое решение:

A AND B может выглядеть как cat file | egrep A | egrep B.

A AND B (NOT C) может выглядеть как cat file | egrep A | egrep B| egrep -v C.

Решение с использованием регулярных выражений: A AND B означает, что мы "разбираем" строки, содержащие A и B.Таким образом, мы можем представить его как (A.*B|B.*A) и использовать этот шаблон в одном вызове egrep, например egrep (A.*B|B.*A) file.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...