如何grep整个单词

Posted

技术标签:

【中文标题】如何grep整个单词【英文标题】:How to grep for the whole word 【发布时间】:2011-02-22 04:09:01 【问题描述】:

我正在使用以下命令来 grep 子目录中的内容

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

不过,这也会找到像 <s:textfield name="sdfsf"...../> 这样的东西

我能做些什么来避免这种情况,所以它只会找到像 <s:text name="sdfsdf"/> 这样的东西

或者就此而言....还找到<s:text somethingElse="lkjkj" name="lkkj"

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

【问题讨论】:

有没有人读到标题为“如何为整个世界 grep”? @Earlz,不,主要是因为我在 Google 上搜索了“grep whole word”。 【参考方案1】:

使用-w 选项进行全词匹配。示例如下:

[binita@ubuntu ~]# a="abcd efg"
[binita@ubuntu ~]# echo $a
abcd efg
[binita@ubuntu ~]# echo $a | grep ab
abcd efg
[binita@ubuntu ~]# echo $a | grep -w  ab
[binita@ubuntu ~]# echo $a | grep -w  abcd
abcd efg

【讨论】:

【参考方案2】:

这是另一种设置单词边界的方法,请注意,如果没有引号,它就不起作用:

grep -r '\<s:text\>' .

【讨论】:

【参考方案3】:

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

rg -w 's:text' . 

应该这样做

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review 我确实提供了答案:rg -w 's:text' 。 建议使用非标准工具可能还有其他原因,但作为一个关于如何使用标准 grep 解决此问题的解决方案,这并不是特别引人注目或令人满意,尤其是考虑到 grep有同样的选择。 这取决于directi有多深和多胖 这取决于文件的数量,ripgrep 可以更快,并且 find->xargs 为每个文件创建一个新进程。【参考方案4】:

使用\b 匹配“单词边界”,这将使您的搜索仅匹配整个单词。

所以你的 grep 看起来像

grep -r "\bSTRING\b"

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

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

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

有资格作为单词边界的三个不同位置:

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

【讨论】:

【参考方案5】:

您可以通过 grep 递归搜索来删除 xargs 命令。而且你通常不需要's'标志。因此:

grep -wr 's:text' 

【讨论】:

【参考方案6】:

您希望-w 选项指定它是单词的结尾。

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

【讨论】:

那么,s 参数有什么作用? @MawgsaysreinstateMonica 禁止显示错误消息。尝试 grep --help,将提供有关有效选项的信息【参考方案7】:

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

xargs grep -s 's:text '

这应该只找到s:text 在最后一个 t 之后有空格的实例。如果您需要查找只有 name 元素的 s:text 实例,请将结果通过管道传递给另一个 grep 表达式,或者使用正则表达式仅过滤您需要的元素。

【讨论】:

如果“文本”在输出的末尾怎么办?在您的解决方案中不会跳过它吗?

以上是关于如何grep整个单词的主要内容,如果未能解决你的问题,请参考以下文章

计算整个文件中单词出现次数的命令

如何使用 grep 在文件夹中查找单词?

grep:查找包含单词`star`但不包含单词`start`的所有文件

如何使用 sed/grep 提取两个单词之间的文本?

如何使用 grep 命令获取连续有六个或更多辅音的单词列表?

如何使用数组中的 preg_grep 查找仅/更多指定字母的单词?