2010-05-21 13 views
44

ich den folgenden Befehl verwenden Sachen grep in subdirsWie für das gesamte Wort grep

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

Dies ist jedoch findet auch Sachen wie <s:textfield name="sdfsf"...../>

Was kann ich, dass so es zu vermeiden tun, um nur findet Sachen wie <s:text name="sdfsdf"/>

oder für diese Angelegenheit .... findet auch <s:text somethingElse="lkjkj" name="lkkj"

grundsätzlich s:text und name sollte in der gleichen Zeile sein ....

+17

Hat jemand den Titel als "wie grep für die ganze Welt ** **" lesen? – Earlz

+1

für die Lulz :) – josh

+7

@Earlz, nein, vor allem, weil ich "grep ganzes Wort" googelte. –

Antwort

49

Sie möchten die -w Option angeben, dass es das Ende eines Wortes ist.

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

0

Wenn Sie nur den Rest Text Teil herausfiltern möchten, können Sie dies tun.

xargs grep -s 's:text '

Dies sollte nur s:text Instanzen mit einem Leerzeichen nach dem letzten t finden. Wenn Sie s:text Instanzen suchen müssen, die nur ein name-Element haben, leiten Sie Ihre Ergebnisse entweder an einen anderen grep Ausdruck oder verwenden Sie regex, um nur die Elemente zu filtern, die Sie benötigen.

+0

Was ist, wenn der "Text" am Ende der Ausgabe steht? Wird es in Ihrer Lösung nicht übersprungen? – pkuszewski

22

Sie können, indem grep Suche rekursiv die xargs Befehl löschen. Und normalerweise brauchst du die "s" -Flagge nicht. Daraus folgt:

grep -wr 's:text' 
23

Verwenden \b auf „Wortgrenzen“ entsprechen, die Ihre Suche nur auf ganze Wörter machen.

Also Ihr grep würde in etwa so aussehen

grep -r "\bSTRING\b" 

das Hinzufügen von Farbe und Zeilennummern könnte helfen zu

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

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

Es gibt drei verschiedene Positionen, die in Frage kommen, wie Wortgrenzen:

  • Vor dem ersten Zeichen in der Zeichenfolge, wenn das erste Zeichen ein Wortzeichen ist.
  • Nach dem letzten Zeichen in der Zeichenfolge, wenn das letzte Zeichen ein Wortzeichen ist.
  • Zwischen zwei Zeichen in der Zeichenfolge, , wobei eins ein Wortzeichen und das andere kein Wortzeichen ist.
0

Sie konnte rg versuchen, https://github.com/BurntSushi/ripgrep:

rg -w 's:text' . 

sollte es tun

+0

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/17780631) –

+1

Ich habe die Antwort geliefert: rg -w 's: text'. – ms4720

Verwandte Themen