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