Как использовать `git grep --not` - PullRequest
2 голосов
/ 19 мая 2019

Я хотел бы выполнить команду git grep для <pattern>, но исключить строки длиной более 200 символов.

Мне удалось добиться этого с помощью команды:

git grep <pattern> | grep -Ev '.{200}'

Если возможно, я бы хотел выполнить это как одну команду (без канала).Я думал, что смогу использовать для этого флаг git grep --not, но сталкиваюсь с трудностями.

Вот моя попытка:

git grep -e <pattern> --not -e '.{200}'

Я пыталсяразличные комбинации вышеупомянутой команды, но не получили желаемого результата.

Буду весьма признателен за любые указания на то, что я должен попробовать в дальнейшем, заранее спасибо за помощь.


Решение :

(спасибо @torek)

git grep -E -e one --and --not -e '.{200}'

Ответы [ 2 ]

3 голосов
/ 19 мая 2019

Описание логических операторов для git grep гласит:

- и
- или
- нет
(…)
Укажите, как несколько шаблонов объединяются с использованием логических выражений. --or является оператором по умолчанию. --and имеет более высокий приоритет, чем --or. -e должен использоваться для всех шаблонов.

Вы использовали:

git grep -e <pattern> --not -e '.{200}'

чтобы вы написали -e для каждого шаблона; но вы не выбрали один из --and или --or, поэтому вы получили значение по умолчанию. Какой по умолчанию? (Прочитайте приведенный выше текст.) Если вы спросите, соответствуют ли какие-либо шаблоны или , а не не менее 200 символов, будет ли выбрано что-то длиной 12 символов? Это не менее 200, так что да, он будет выбран. А как насчет совпадения с 234 символами и ? Ну, это соответствует, так что да, это будет выбрано. Единственные вещи, которые будут отклонены, это те, которые не соответствуют и имеют длину 200 символов или более.

Обратите внимание, что git grep само по умолчанию также использует базовые регулярные выражения, если вы не используете параметр командной строки или не настроите его для использования расширенных или регулярных выражений Perl. Так что вы, вероятно, хотите -E -e <pattern> --and --not -e '.{200}' здесь. Смотри также https://en.wikipedia.org/wiki/Regular_expression

1 голос
/ 19 мая 2019

Вы также можете использовать awk для этой проблемы.

awk '/<pattern>/ && length($2) < 200'

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