如何grep的整个字

我正在使用下面的命令grep东西在subdirs

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

但是,这也发现像<s:textfield name="sdfsf"...../>

我能做些什么来避免这种情况,所以它只是find像<s:text name="sdfsdf"/>

或者对于这个问题….还发现<s:text somethingElse="lkjkj" name="lkkj"

基本上s:textname应该在同一行….

你想要-w选项来指定它是一个单词的结尾。

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

您可以通过recursiongrepsearch来删除xargs命令。 而你通常不需要这个标志。 因此:

 grep -wr 's:text' 

使用\b匹配“单词界限”,这将使您的search只匹配整个单词。

所以你的grep看起来像这样

 grep -r "\bSTRING\b" 

添加颜色和行号也可能有帮助

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

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

有三种不同的立场可以作为单词的边界:

  • 在string中的第一个字符之前,如果第一个字符是单词字符。
  • 在string中的最后一个字符之后,如果最后一个字符是一个单词字符。
  • string中的两个字符之间,其中一个是单词字符,另一个不是单词字符。

如果你只是想过滤掉剩下的文本部分,你可以这样做。

xargs grep -s 's:text '

这应该只find最后一个t之后有空格的s:text实例。 如果您需要查找仅包含名称元素的s:text实例,请将您的结果传递给另一个grepexpression式,或者使用regex只过滤所需的元素。

你可以试试rg, https : //github.com/BurntSushi/ripgrep :

 rg -w 's:text' . 

应该这样做