我试图使用grep来查找特定字符串的非复数实例。
例如,我想找到" string"的所有实例,但遗漏了"字符串 s "的所有实例。
我该怎么做?
编辑:我确实想找到其他字符后跟的实例。我真的只需要省略那些结束于'
的那些答案 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$'
我们的想法是,您只需先使用模式string
和strings
列出所有字符串,然后
命令:
`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)'