如何 grep 查找整个单词

发布于 2024-09-02 12:14:27 字数 411 浏览 8 评论 0 原文

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

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

但是,这也会找到类似

我能做些什么来避免这种情况所以它只会找到类似 的东西,

或者就此而言....还找到

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

I am using the following command to grep stuff in subdirs

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

However, this also finds stuff like <s:textfield name="sdfsf"...../>

What can I do to avoid that so it just finds stuff like <s:text name="sdfsdf"/>

OR for that matter....also finds <s:text somethingElse="lkjkj" name="lkkj"

basically s:text and name should be on same line....

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

你是暖光i 2024-09-09 12:14:27

您希望使用 -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'

凉薄对峙 2024-09-09 12:14:27

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

所以你的 grep 看起来像

grep -r "\bSTRING\b"

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

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

来自 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

grep -r "\bSTRING\b"

adding color and line numbers might help too

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

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

There are three different positions that qualify as word boundaries:

  • Before the first character in the string, if the first character is a
    word character.
  • After the last character in the string, if the last
    character is a word character.
  • Between two characters in the string,
    where one is a word character and the other is not a word character.
巴黎夜雨 2024-09-09 12:14:27

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

grep -wr 's:text' 

You can drop the xargs command by making grep search recursively. And you normally don't need the 's' flag. Hence:

grep -wr 's:text' 
梦亿 2024-09-09 12:14:27

使用 -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

Use -w option for whole word match. Sample given below:

[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
亢潮 2024-09-09 12:14:27

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

rg -w 's:text' . 

应该这样做

you could try rg, https://github.com/BurntSushi/ripgrep :

rg -w 's:text' . 

should do it

向日葵 2024-09-09 12:14:27

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

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\>' .

笨笨の傻瓜 2024-09-09 12:14:27

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

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 find s:text instances that only have a name element, either pipe your results to another grep expression, or use regex to filter only the elements you need.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文