开发者

How to grep for the whole word

I am using the following command to grep stuff in subdirs

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

However, this also finds stuff like <s:textfield name="sdfsf"...../>

What can I do to avoid that so it just finds stuff like <s:text name="sdfsdf"/>

OR for that matter....also finds <s:text somethingElse="lkjkj" 开发者_Python百科name="lkkj"

basically s:text and name should be on same line....


You want the -w option to specify that it's the end of a word.

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


Use \b to match on "word boundaries", which will make your search match on whole words only.

So your grep would look something like

grep -r "\bSTRING\b"

adding color and line numbers might help too

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

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

There are three different positions that qualify as word boundaries:

  • Before the first character in the string, if the first character is a word character.
  • After the last character in the string, if the last character is a word character.
  • Between two characters in the string, where one is a word character and the other is not a word character.


You can drop the xargs command by making grep search recursively. And you normally don't need the 's' flag. Hence:

grep -wr 's:text' 


you could try rg, https://github.com/BurntSushi/ripgrep :

rg -w 's:text' . 

should do it


Use -w option for whole word match. Sample given below:

[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


This is another way of setting the boundaries of the word, note that it doesn't work without the quotes around it:

grep -r '\<s:text\>' .


If you just want to filter out the remainder text part, you can do this.

xargs grep -s 's:text '

This should find only s:text instances with a space after the last t. If you need to find s:text instances that only have a name element, either pipe your results to another grep expression, or use regex to filter only the elements you need.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜