使用grep查找最后没有特定字符的字符串匹配

时间:2016-02-26 15:42:13

标签: regex grep

我试图使用grep来查找特定字符串的非复数实例。

例如,我想找到" string"的所有实例,但遗漏了"字符串 s "的所有实例。

我该怎么做?

编辑:我确实想找到其他字符后跟的实例。我真的只需要省略那些结束于'

的那些

3 个答案:

答案 0 :(得分:2)

您可以在grep中使用字词边界:

grep '\<string\>' file

示例:

# with word boundaries
grep '\<string\>' <<< $'string\nstrings'
string

# without word boundaries
grep 'string' <<< $'string\nstrings'
string
strings

编辑:根据以下评论,您可以使用:

grep -E '\<string([^s]|$)' file

示例:

grep -E '\<string([^s]|$)' <<< $'string\nstrings'
string

答案 1 :(得分:1)

您可以使用\b来匹配a word boundary。希望这会有所帮助:

[root@rh57quinn ~]# echo 'find instances of a particular string - any "string", but leave out "strings" and drawstring' |grep -Eo '\bstring\b'
string
string

答案 2 :(得分:1)

如果您使用普通grep,则可以通过这种方式完成

echo "stringsMystring1string2strings" | grep -Eo 'strings?' | grep -Eo '^string$'

我们的想法是,您只需先使用模式stringstrings列出所有字符串,然后

命令:

`grep -Eo 'strings?'`

结果:

strings
string
string
strings

再次grep结果

命令:

grep -Eo '^string$'

结果:

string
string

根据regex-lookahead-for-not-followed-by-in-grep,有些人建议使用GNU grep,您可以使用-P--perl-regexp选项来启用lookaround功能。给定的正则表达式可能采用这样的形式

echo "stringsMystring1string2strings" | grep -P 'string(?!s)'