grep за исключением суперструн - PullRequest
0 голосов
/ 27 октября 2018

Я пытаюсь использовать git grep для поиска шаблонов, за исключением суперпаттернов.

Мой конкретный пример:

git grep 'ad'

Но я хочу исключить все шаблоны, такие как «load» и «Load», «Thread», «thread (self)» и т. Д. И т. Д. И т. Д. И т. Д. И т. Д. Есть ли простой способ сделать это?

Ответы [ 3 ]

0 голосов
/ 27 октября 2018

В ответ на вопрос @ codeforester в разделе комментариев.

git grep -w ad

Позвольте мне расширить и объяснить, что это значит.

git grep
-w / --word-regexp

Соответствует шаблону только на границе слова (либо начинается в начале строки,
или предшествует несловесный символ; конец в конце строки или после не состоящего из слов символа).

Добавление -w приведет к поиску всего слова, а не его части, это означает, что шаблон должен соответствовать всему тексту, а не только его части.


Со страницы руководства unix grep:

Выберите только те строки, содержащие совпадения, которые образуют целые слова .
Тест состоит в том, что соответствующая подстрока должна быть в начале строки или перед словом составной характер. Точно так же он должен быть либо в конце линии или после не состоящего из слов символа. Составляющие слова символы - это буквы, цифры и подчеркивание.

0 голосов
/ 27 октября 2018

Согласно вашим дальнейшим запросам, если вы хотите сопоставить определенные слова, но не все из них, вы можете исключить слово (или список слов) одним из следующих способов:

Целые слова

Как было сказано ранее, совпадение целых слов будет соответствовать шаблону, содержащемуся в слове.Этими единицами слова являются буквы, цифры и подчеркивание.-w является опцией для этого:

git grep -w ad будет находить только экземпляры слова "ad", но не "load" или "toad" и т. Д.

Invert-Match

Другой вариант - перенаправить grep к себе и использовать флаг обратного совпадения.Допустим, вы хотите найти экземпляры «ad» и все слова, содержащие «ad», за исключением «toad» и «load».Вы можете передать grep в другую команду grep, используя -v и указав список слов, которые вы хотите исключить, используя экранированный канал (|) в качестве разделителя:

git grep ad | grep -v "toad\|load"

или если вы используете регулярное выражение:

git grep ad | grep -ve "toad|load"

Если вы все еще хотите действие типа more, вы можете передать последний бит на more.

0 голосов
/ 27 октября 2018

Используйте параметр -w, чтобы он осуществлял поиск только по словам.Это относится как к стандартному grep, так и к большинству grep-подобных инструментов.

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