Ответ 1
Вы хотите, чтобы параметр -w
указывал, что это конец слова.
find . | xargs grep -sw 's:text'
Я использую следующую команду для 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
должны быть на одной строке....
Вы хотите, чтобы параметр -w
указывал, что это конец слова.
find . | xargs grep -sw 's:text'
Вы можете отказаться от команды xargs
, сделав поиск grep рекурсивно. И вам обычно не нужен флаг 's'. Следовательно:
grep -wr 's:text'
Используйте \b
для соответствия "границам слов", что сделает ваш поиск совпадением только для целых слов.
Итак, ваш grep выглядел бы как
grep -r "\bSTRING\b"
добавление цветов и номеров строк также может помочь
grep --color -rn "\bSTRING\b"
От http://www.regular-expressions.info/wordboundaries.html:
В качестве границ слов существуют три разных позиции:
- Перед первым символом в строке, если первый символ является символ слова.
- После последнего символа в строке, если последний символ - символ слова.
- Между двумя символами в строке, где один является символом слова, а другой не является символом слова.
Если вы хотите отфильтровать часть текста остатка, вы можете сделать это.
xargs grep -s 's:text '
Это должно найти только экземпляры s:text
с пробелом после последнего t. Если вам нужно найти экземпляры s:text
, которые имеют только элемент имени, либо передайте результаты в другое выражение grep
, либо используйте регулярное выражение для фильтрации только тех элементов, которые вам нужны.
вы можете попробовать rg, https://github.com/BurntSushi/ripgrep:
rg -w 's:text' .
должен сделать это