Использование grep с отрицательным прогнозом не возвращает совпадений - PullRequest
0 голосов
/ 03 мая 2018

Итак, я пишу несколько скриптов для переноса SVN в GIT, у нас есть несколько «старых» веток в SVN, которые все еще существуют, но их не нужно перемещать в GIT. (Филиалы, которые, как оказалось, уже были объединены с магистралью). После небольшого количества Google-фу я придумал следующее:

$(git for-each-ref --format='%(refname:short)' --merged origin/trunk | grep '(?!origin\/trunk)origin\/.*')

Для передачи на

git branch -D --remote _previouscommandgoeshere_

Если я запускаю только git for-each-ref --format='%(refname:short)' --merged origin/trunk, я получаю следующий вывод:

origin/IR1091
origin/IR1102
origin/IR1105
...
origin/IR932
origin/Software
origin/trunk
origin/trunk@6792
origin/trunk@6850

Когда я добавляю команду grep, я получаю 0 значений.

Однако, https://regexr.com/3ot1t дал мне понять, что мое регулярное выражение делает именно то, что я хочу. Удалите все ветви, кроме ветви trunk.

Что не так с регулярным выражением / grep? (заметьте, я , а не гуру linux / grep. Все это делается в bash, который поставляется с windows git)

1 Ответ

0 голосов
/ 03 мая 2018

Регулярное выражение верно, но grep по умолчанию не поддерживает конструкции выражения PCRE, такие как Negative упреждающий просмотр (?!. Вам нужно включить флаг -P, чтобы включить библиотеку PCRE, без этого она просто поддерживает базовый механизм регулярных выражений

.. | grep -oP '(?!origin\/trunk)origin\/.*'

Или используйте perl соответствие регулярному выражению в командной строке, для которого не нужно устанавливать флаги

.. | perl -ne 'print if /(?!origin\/trunk)origin\/.*/'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...