如何 grep 查找整个单词
我正在使用以下命令来 grep 子目录中的内容
find . | xargs grep -s 's:text'
但是,这也会找到类似
我能做些什么来避免这种情况所以它只会找到类似
的东西,
或者就此而言....还找到
基本上 s:text
和 name
应该在同一行......
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
您希望使用
-w
选项来指定它是单词的结尾。<代码>查找 . | xargs grep -sw 's:text'
You want the
-w
option to specify that it's the end of a word.find . | xargs grep -sw 's:text'
使用
\b
匹配“单词边界”,这将使您的搜索仅匹配整个单词。所以你的 grep 看起来像
添加颜色和行号也可能有帮助
来自 http://www.regular -expressions.info/wordboundaries.html:
Use
\b
to match on "word boundaries", which will make your search match on whole words only.So your grep would look something like
adding color and line numbers might help too
From http://www.regular-expressions.info/wordboundaries.html:
您可以通过递归进行 grep 搜索来删除 xargs 命令。而且您通常不需要 's' 标志。因此:
You can drop the
xargs
command by making grep search recursively. And you normally don't need the 's' flag. Hence:使用
-w
选项进行整个单词匹配。示例如下:Use
-w
option for whole word match. Sample given below:你可以尝试 rg, https://github.com/BurntSushi/ripgrep :
应该这样做
you could try rg, https://github.com/BurntSushi/ripgrep :
should do it
这是设置单词边界的另一种方法,请注意,如果没有引号,它就不起作用:
grep -r '\' .
This is another way of setting the boundaries of the word, note that it doesn't work without the quotes around it:
grep -r '\<s:text\>' .
如果你只是想过滤掉剩余的文本部分,你可以这样做。
xargs grep -s 's:text '
这应该只查找最后一个 t 之后有空格的
s:text
实例。如果您需要查找仅包含 name 元素的s:text
实例,请将结果通过管道传输到另一个grep
表达式,或者使用正则表达式仅过滤您需要的元素。If you just want to filter out the remainder text part, you can do this.
xargs grep -s 's:text '
This should find only
s:text
instances with a space after the last t. If you need to finds:text
instances that only have a name element, either pipe your results to anothergrep
expression, or use regex to filter only the elements you need.