我正在使用以下命令在子目录中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东西
find . | xargs grep -s 's:text'
但是,这也会发现类似 <s:textfield name="sdfsf"...../>
我应该怎么做才能避免这种情况,所以它只会发现类似 <s:text name="sdfsdf"/>
或为此...。也发现 <s:text somethingElse="lkjkj" name="lkkj"
基本上s:text
并且name
应该在同一行....
Answers:
使用\b
相匹配的“字边界”,这将使得在全字搜索匹配。
所以你的grep看起来像
grep -r "\bSTRING\b"
添加颜色和行号可能也有帮助
grep --color -rn "\bSTRING\b"
从http://www.regular-expressions.info/wordboundaries.html:
有三个不同的位置可以作为单词边界:
- 如果字符串中的第一个字符是单词字符,则在字符串中第一个字符之前。
- 如果字符串中的最后一个字符是单词字符,则在字符串的最后一个字符之后。
- 字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符。
grep
这并不是特别令人信服或令人满意的,尤其是考虑到grep
具有相同选择的情况。
如果您只想过滤掉剩余的文本部分,则可以执行此操作。
xargs grep -s 's:text '
这应该只找到s:text
在最后一个t之后有空格的实例。如果您需要查找s:text
仅包含名称元素的实例,则可以将结果通过管道传递到另一个grep
表达式,或者使用正则表达式仅过滤所需的元素。