我使用以下命令来grep子目录中的东西
find . | xargs grep -s 's:text'
但是,这也会找到像<s:textfield name="sdfsf"...../>
我可以做些什么来避免这种情况,因此它只会找到像<s:text name="sdfsdf"/>
OR就此而言......也找到了<s:text somethingElse="lkjkj" name="lkkj"
基本上s:text
和name
应该在同一行....
答案 0 :(得分:65)
您希望-w
选项指定它是单词的结尾。
find . | xargs grep -sw 's:text'
答案 1 :(得分:40)
使用\b
匹配&#34;字词边界&#34;,这将使您的搜索仅匹配整个单词。
所以你的grep看起来像
grep -r "\bSTRING\b"
添加颜色和行号也可能有帮助
grep --color -rn "\bSTRING\b"
来自http://www.regular-expressions.info/wordboundaries.html:
有三种不同的职位符合词边界:
- 在字符串中的第一个字符之前,如果第一个字符是a 字符。
- 字符串中的最后一个字符后,如果是最后一个字符 character是一个单词字符。
- 字符串中的两个字符之间, 其中一个是单词字符而另一个不是单词字符。
答案 2 :(得分:26)
您可以通过递归执行grep搜索来删除xargs
命令。而且你通常不需要's'标志。因此:
grep -wr 's:text'
答案 3 :(得分:1)
答案 4 :(得分:0)
如果您只想过滤掉剩余文本部分,可以执行此操作。
xargs grep -s 's:text '
这应该只找到s:text
个实例,最后一个t后面有空格。如果您需要查找仅包含name元素的s:text
个实例,请将结果传递给另一个grep
表达式,或使用regex仅过滤所需的元素。
答案 5 :(得分:0)
这是另一种设置单词边界的方法,请注意,如果没有引号,它就不起作用:
grep -r '\<s:text\>' .