Как сказать по всему слову - PullRequest
60 голосов
/ 21 мая 2010

Я использую следующую команду для grep вещи в подкаталогах

find . | xargs grep -s 's:text'

Однако, это также находит такие вещи, как <s:textfield name="sdfsf"...../>

Что я могу сделать, чтобы избежать этого, так что он просто находит такие вещи, как <s:text name="sdfsdf"/>

ИЛИ в этом отношении .... также находит <s:text somethingElse="lkjkj" name="lkkj"

в основном s:text и name должны быть в одной строке ....

Ответы [ 5 ]

68 голосов
/ 21 мая 2010

Вы хотите, чтобы опция -w указывала, что это конец слова.

find . | xargs grep -sw 's:text'

43 голосов
/ 03 декабря 2015

Используйте \b для сопоставления по "границам слов", что сделает поиск подходящим только для целых слов.

Так что ваш grep будет выглядеть примерно так:

grep -r "\bSTRING\b"

Добавление цвета и номеров строк тоже может помочь

grep --color -rn "\bSTRING\b"

С http://www.regular -expressions.info / wordboundaries.html :

Есть три разных положения, которые квалифицируются как границы слов:

  • Перед первым символом в строке, если первый символ является слово характер.
  • После последнего символа в строке, если последний символ это слово символ
  • Между двумя символами в строке, где один - символ слова, а другой - не символ слова.
26 голосов
/ 03 июля 2013

Вы можете отбросить команду xargs, выполнив поиск по grep. И вам обычно не нужен флаг 's'. Следовательно:

grep -wr 's:text' 
1 голос
/ 30 октября 2017

Вы можете попробовать RG, https://github.com/BurntSushi/ripgrep:

rg -w 's:text' . 

должен это сделать

0 голосов
/ 21 мая 2010

Если вы просто хотите отфильтровать оставшуюся часть текста, вы можете сделать это.

xargs grep -s 's:text '

Это должно найти только s:text экземпляров с пробелом после последнего t. Если вам нужно найти s:text экземпляров, которые имеют только элемент name, либо передайте результаты в другое выражение grep, либо используйте регулярное выражение для фильтрации только тех элементов, которые вам нужны.

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