如何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:text
和name
应该在同一行….
你想要-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
实例,请将您的结果传递给另一个grep
expression式,或者使用regex只过滤所需的元素。
你可以试试rg, https : //github.com/BurntSushi/ripgrep :
rg -w 's:text' .
应该这样做