Подтвердить что ты не робот

Как grep для всего слова

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

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

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

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

ИЛИ, если на то пошло... также находит <s:text somethingElse="lkjkj" name="lkkj"

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

grep -wr 's:text' 

Ответ 3

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

Итак, ваш grep выглядел бы как

grep -r "\bSTRING\b"

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

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

От http://www.regular-expressions.info/wordboundaries.html:

В качестве границ слов существуют три разных позиции:

  • Перед первым символом в строке, если первый символ является символ слова.
  • После последнего символа в строке, если последний символ - символ слова.
  • Между двумя символами в строке, где один является символом слова, а другой не является символом слова.

Ответ 4

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

xargs grep -s 's:text '

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