正则表达式匹配不包含单词

时间:2016-12-24 20:31:42

标签: regex shell grep regex-negation

我试图创建一个正则表达式,用于grep语句以匹配不包含单词的行。在下面的例子中,每行都有uhu,uhuu,uhuuu,uhuuu这两个词。我使用echo在一个命令中执行此操作。结果是:

line1 = uh - end
line2 = uhu - end
line3 = uhuu - end
line4 = uhuuu - end
line5 = uhuuuu - end

不要介意行号和结束词。所以,我只想重复2次和4次重复,即第3行和第5行。我试过了:

echo -e 'line1 = uh - end\nline2 = uhu - end\nline3 = uhuu - end\nline4 = uhuuu - end\nline5 = uhuuuu - end' | grep -E 'uh(u{2}|u{4})'
line3 = uhuu - end
line4 = uhuuu - end
line5 = uhuuuu - end

它带来了第3行和第5行,但也有第4行,因为uhuuu有2个u,还有第3个。所以我的问题是,使用正则表达式,是否可以排除第4行,仅考虑' uhuuu'字?

我知道我可以通过管道和grep -v完成这一切,但我想知道是否可以使用RegEx来完成。

我检查了这个链接,但无法找到一种方法让它适合我的情况。谢谢 https://stackoverflow.com/questions/406230/regular-expression-to-match-line-that-doesnt-contain-a-word#=

1 个答案:

答案 0 :(得分:1)

分组后使用字边界元字符:

grep -E 'uh(u{2}|u{4})\b'