如何为整个单词grep

jos*_*osh 65 unix grep

我使用以下命令来grep子目录中的东西

find . | xargs grep -s 's:text'
Run Code Online (Sandbox Code Playgroud)

但是,这也找到了类似的东西 <s:textfield name="sdfsf"...../>

我该怎么做才能避免这种情况,所以它只能找到类似的东西 <s:text name="sdfsdf"/>

或者那个问题......也发现了 <s:text somethingElse="lkjkj" name="lkkj"

基本上s:text,并name应在同一行....

Der*_*k H 77

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

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

  • 那么,“s”参数有什么作用呢? (4认同)
  • @MawgsaysreinstateMonica 抑制错误消息。尝试 grep --help,将提供有关有效选项的信息 (2认同)

cs0*_*s01 50

使用\b相匹配的"字边界",这将使得在全字搜索匹配.

所以你的grep看起来像

grep -r "\bSTRING\b"
Run Code Online (Sandbox Code Playgroud)

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

grep --color -rn "\bSTRING\b"
Run Code Online (Sandbox Code Playgroud)

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

有三种不同的职位符合词边界:

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


joc*_*tee 28

你可以放弃 xargs通过递归进行grep搜索命令.而且你通常不需要's'标志.因此:

grep -wr 's:text' 
Run Code Online (Sandbox Code Playgroud)


Bin*_*ati 11

使用-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
Run Code Online (Sandbox Code Playgroud)