Ich benutze den folgenden Befehl, um Sachen in Unterverzeichnissen zu grep
find . | xargs grep -s 's:text'
Dies findet aber auch Sachen wie <s:textfield name="sdfsf"...../>
Was kann ich tun, um das zu vermeiden, damit es nur Dinge wie findet? <s:text name="sdfsdf"/>
ODER für diese Angelegenheit .... findet auch <s:text somethingElse="lkjkj" name="lkkj"
im Grunde s:text
und name
sollte in der gleichen Zeile sein ....
Antworten:
Sie möchten, dass die
-w
Option angibt, dass es das Ende eines Wortes ist.find . | xargs grep -sw 's:text'
quelle
Verwenden Sie
\b
diese Option, um "Wortgrenzen" abzugleichen, sodass Ihre Suche nur mit ganzen Wörtern übereinstimmt.Ihr grep würde also ungefähr so aussehen
Das Hinzufügen von Farb- und Zeilennummern kann ebenfalls hilfreich sein
Von http://www.regular-expressions.info/wordboundaries.html :
quelle
Sie können den
xargs
Befehl löschen, indem Sie die Grep-Suche rekursiv durchführen. Und normalerweise brauchen Sie die Flagge 's' nicht. Daher:quelle
Sie könnten versuchen, rg, https://github.com/BurntSushi/ripgrep :
Sollte es tun
quelle
grep
nicht besonders überzeugend oder befriedigend, insbesondere angesichtsgrep
der gleichen Option.Wenn Sie nur den restlichen Textteil 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 Sies:text
Instanzen suchen müssen , die nur ein Namenselement enthalten, leiten Sie Ihre Ergebnisse entweder an einen anderengrep
Ausdruck weiter oder verwenden Sie Regex, um nur die benötigten Elemente zu filtern.quelle