2010-05-21 22 views
44

我使用下面的命令在子目录到grep东西如何用grep整个字

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

然而,这也发现类似<s:textfield name="sdfsf"...../>

东西,我能做些什么,以避免所以它只是发现像<s:text name="sdfsdf"/>

或与此有关的东西....也发现<s:text somethingElse="lkjkj" name="lkkj"

基本上s:textname应位于同一行上。

+17

没有人阅读标题为 “如何到grep整个世界** **”? – Earlz 2010-05-21 01:50:13

+1

为lulz :) – josh 2010-05-21 01:57:58

+7

@Earlz,不,主要是因为我谷歌搜索“grep整个词”。 – 2017-02-11 05:05:22

回答

49

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

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

0

如果您只是想过滤掉其余文本部分,则可以执行此操作。

xargs grep -s 's:text '

这应该只发现s:text情况下,与一个't后的空间。如果您需要查找仅具有名称元素的s:text实例,请将结果输送到另一个grep表达式,或者使用正则表达式仅过滤所需的元素。

+0

如果“文本”在输出结尾处怎么办?它会不会在你的解决方案中被跳过? – pkuszewski 2015-12-19 22:21:44

22

您可以通过grep的搜索递归下降的xargs命令。而你通常不需要's'的标志。因此:

grep -wr 's:text' 
23

使用\b以匹配“字边界”,这将使得在全字搜索匹配。

所以你的grep会看起来像

grep -r "\bSTRING\b" 

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

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

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

有迹象表明,有资格作为三个不同的位置字界:

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

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

rg -w 's:text' . 

应该这样做

+0

尽管这个链接可能回答这个问题,但最好在这里包含答案的基本部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/17780631) – 2017-10-30 11:55:16

+1

我确实提供了答案:rg -w's:text'。 – ms4720 2017-11-01 08:13:14