2010-05-21 15 views
44

Używam następujące polecenie grep rzeczy w subdirsJak grep dla całego słowa

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

Jednak ta znajdzie również rzeczy jak <s:textfield name="sdfsf"...../>

Co mogę zrobić, aby tego uniknąć, dlatego właśnie znajdzie rzeczy jak <s:text name="sdfsdf"/>

czy o to chodzi .... znajdzie również <s:text somethingElse="lkjkj" name="lkkj"

zasadzie s:text i name powinny być w tej samej linii ....

+17

Czy ktoś przeczytać tytuł "jak grep dla całego świata ** **"? – Earlz

+1

za lulz :) – josh

+7

@Alzel, nie, głównie dlatego, że przeglądam "grep whole word". –

Odpowiedz

49

Chcesz, aby opcja -w określała, że ​​to koniec słowa.

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

0

Jeśli chcesz odfiltrować pozostałą część tekstu, możesz to zrobić.

xargs grep -s 's:text '

ten powinien znaleźć tylko s:text instancji z miejsca po ostatnim t. Jeśli chcesz znaleźć instancje, które mają tylko element name, przeprowadź wyniki do innego wyrażenia grep lub użyj wyrażenia regularnego, aby odfiltrować tylko te elementy, których potrzebujesz.

+0

co, jeśli "tekst" znajduje się na końcu wydruku? Czy nie zostanie pominięty w twoim rozwiązaniu? – pkuszewski

22

można upuścić komendę xargs poprzez wyszukiwanie grep rekurencyjnie. Zwykle nie potrzebujesz flagi 's'. Stąd:

grep -wr 's:text' 
23

Zastosowanie \b pasujące słowo na „granic”, które uczynią Państwa wyszukiwarki na mecz tylko całych słów.

Więc grep będzie wyglądać mniej więcej tak

grep -r "\bSTRING\b" 

dodawania numerów kolorów i linii może pomóc zbyt

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

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

Istnieją trzy różne pozycje, które kwalifikują się jako granice słów:

  • Przed pierwszym znakiem ciągu, jeśli pierwszy znak jest znakiem słownym .
  • Po ostatnim znaku w ciągu znaków, jeśli ostatni znak jest znakiem słownym.
  • Pomiędzy dwoma znakami w ciągu, , gdzie jeden jest znakiem słownym, a drugi nie jest znakiem słownym.
0

można spróbować RG https://github.com/BurntSushi/ripgrep:

rg -w 's:text' . 

powinien zrobić to

+0

Podczas gdy ten link może odpowiedzieć na pytanie, lepiej umieścić tutaj istotne części odpowiedzi i podać link do odsyłacza. Odpowiedzi dotyczące linków mogą stać się nieprawidłowe, jeśli strona z linkami się zmieni. - [Z recenzji] (/ recenzja/niskiej jakości-posts/17780631) –

+1

Podałem odpowiedź: rg -w: tekst ". – ms4720

Powiązane problemy