【发布时间】:2012-11-08 03:42:20
【问题描述】:
我想知道 grep 中的正则表达式来匹配所有不是特定单词的内容。我知道如何不匹配不是单个字符的所有内容,
gibberish blah[^.]*jack
只要中间不包含句点,它将匹配 blah、jack 和介于两者之间的所有内容。但是有可能做这样的事情吗?
gibberish blah[^joe]*jack
匹配 blah、jack 和介于两者之间的所有内容,只要中间不包含单词“joe”?
更新: 如果更适合此目的,我也可以使用 AWK。
所以基本上,我只想得到句子“gibberish blah other words jack”,只要“joe”不在其他词中。
更新 2(另一个问题的答案):
对不起,我累了。该句子实际上可以包含单词“joe”,但不能包含两个。因此,“胡言乱语 blah jill joe moo jack”会被接受,但“胡言乱语 blah jill joe moo joe jack”不会被接受。 无论如何,我想出了解决问题的方法。只需 grep 搜索“gibberish.*jack”,然后计算字数 (wc) 以查看该句子中有多少“joes”。如果 wc 返回 1,则可以,但如果返回 2 或更多,则该句子是错误的。
所以,很抱歉提出一个甚至无法解决我的问题的问题。我会将 sputnick 的答案标记为正确的答案,因为他的答案看起来可以解决原始帖子的问题。
【问题讨论】:
-
不,正则表达式不允许您这样做。方括号内的东西是一个set。没有办法否定 BRE 或 ERE 中的原子。虽然你也许可以在 PCRE 中做到这一点。
-
这个不清楚。它应该首先匹配“blah”还是“blahish”? oO
-
@sputnick 你说得对,但不清楚。我会编辑它。
-
你测试过
grep -v,就像我在我的帖子中解释的那样吗?