Для and
вместе нескольких поисков, используйте несколько проверочных утверждений, по одному на каждую поисковую вещь, кроме последнего:
вместо записи
grep -P A * | grep B
Вы пишете
grep -P '(?=.*A)B' *
grep -Pr '(?=.*db-connect\.php)version' .
Не пишите
grep -P 'A.*B|B.*A' *
потому что это не срабатывает при наложении, тогда как метод (?=…)(?=…)
- нет.
Вы также можете добавить в NOT
операторы. Для поиска строк, которые не соответствуют X
, вы обычно, конечно, используете -v
в командной строке. Но вы не можете сделать это, если это часть более крупного шаблона. Когда это так, вы добавляете (?=(?!X).)*$)
к шаблону, чтобы исключить что-либо с X
в нем.
Итак, представьте, что вы хотите сопоставить строки со всеми тремя из A, B, а затем с C или D, , но , в которых нет X или Y. Все, что вам нужно, это:
grep -P '(?=^.*A)(?=^.*B)(?=^(?:(?!X).)*$)(?=^(?:(?!Y).)*$)C|D' *
В некоторых оболочках и в некоторых настройках. вам придется убежать от !
, если это ваш персонаж подстановки истории.
Ну, разве это не круто?