Używam następującego polecenia, aby grepować rzeczy w podkatalogach
find . | xargs grep -s 's:text'
Jednak to również znajduje takie rzeczy <s:textfield name="sdfsf"...../>
Co mogę zrobić, aby tego uniknąć, aby po prostu znajdował takie rzeczy <s:text name="sdfsdf"/>
LUB w tej sprawie ... również znajduje <s:text somethingElse="lkjkj" name="lkkj"
w zasadzie s:text
i name
powinien znajdować się w tej samej linii ....
Odpowiedzi:
Chcesz mieć
-w
opcję określającą, że jest to koniec słowa.find . | xargs grep -sw 's:text'
źródło
Użyj,
\b
aby dopasować „granice słów”, co sprawi, że wyszukiwanie będzie dotyczyć tylko całych słów.Więc twój grep wyglądałby jakoś
dodanie koloru i numerów linii również może pomóc
Z http://www.regular-expressions.info/wordboundaries.html :
źródło
Możesz porzucić
xargs
polecenie, wykonując wyszukiwanie grep rekurencyjnie. Zwykle nie potrzebujesz flagi „s”. W związku z tym:źródło
możesz spróbować rg, https://github.com/BurntSushi/ripgrep :
powinien to zrobić
źródło
grep
nie jest to szczególnie atrakcyjne ani satysfakcjonujące, zwłaszcza biorąc pod uwagę, żegrep
ma tę samą opcję.Jeśli chcesz tylko odfiltrować pozostałą część tekstu, możesz to zrobić.
xargs grep -s 's:text '
Powinno to znaleźć tylko
s:text
wystąpienia ze spacją po ostatnim t. Jeśli chcesz znaleźćs:text
instancje, które mają tylko element name, prześlij wyniki do innegogrep
wyrażenia lub użyj wyrażenia regularnego, aby odfiltrować tylko potrzebne elementy.źródło