我使用下面的命令在子目录到grep东西如何用grep整个字
find . | xargs grep -s 's:text'
然而,这也发现类似<s:textfield name="sdfsf"...../>
东西,我能做些什么,以避免所以它只是发现像<s:text name="sdfsdf"/>
或与此有关的东西....也发现<s:text somethingElse="lkjkj" name="lkkj"
基本上s:text
和name
应位于同一行上。
我使用下面的命令在子目录到grep东西如何用grep整个字
find . | xargs grep -s 's:text'
然而,这也发现类似<s:textfield name="sdfsf"...../>
东西,我能做些什么,以避免所以它只是发现像<s:text name="sdfsdf"/>
或与此有关的东西....也发现<s:text somethingElse="lkjkj" name="lkkj"
基本上s:text
和name
应位于同一行上。
您希望-w
选项指定它是单词的结尾。
find . | xargs grep -sw 's:text'
如果您只是想过滤掉其余文本部分,则可以执行此操作。
xargs grep -s 's:text '
这应该只发现s:text
情况下,与一个't后的空间。如果您需要查找仅具有名称元素的s:text
实例,请将结果输送到另一个grep
表达式,或者使用正则表达式仅过滤所需的元素。
如果“文本”在输出结尾处怎么办?它会不会在你的解决方案中被跳过? – pkuszewski 2015-12-19 22:21:44
您可以通过grep的搜索递归下降的xargs
命令。而你通常不需要's'的标志。因此:
grep -wr 's:text'
使用\b
以匹配“字边界”,这将使得在全字搜索匹配。
所以你的grep会看起来像
grep -r "\bSTRING\b"
添加颜色和行号也会有所帮助
grep --color -rn "\bSTRING\b"
从http://www.regular-expressions.info/wordboundaries.html:
有迹象表明,有资格作为三个不同的位置字界:
- 在字符串中的第一个字符之前,如果第一个字符是 单词字符。
- 在字符串中的最后一个字符后面,如果最后一个 字符是单词字符。
- 字符串中的两个字符之间, 其中一个是单词字符,另一个不是单词字符。
尽管这个链接可能回答这个问题,但最好在这里包含答案的基本部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/17780631) – 2017-10-30 11:55:16
我确实提供了答案:rg -w's:text'。 – ms4720 2017-11-01 08:13:14
没有人阅读标题为 “如何到grep整个世界** **”? – Earlz 2010-05-21 01:50:13
为lulz :) – josh 2010-05-21 01:57:58
@Earlz,不,主要是因为我谷歌搜索“grep整个词”。 – 2017-02-11 05:05:22