Grep Regex-括号中的单词?
我想知道grep中的正则表达式,以匹配所有非特定单词。我知道如何不匹配不是单个字符的所有字符Grep Regex-括号中的单词?,regex,grep,Regex,Grep,我想知道grep中的正则表达式,以匹配所有非特定单词。我知道如何不匹配不是单个字符的所有字符 gibberish blah[^.]*jack 只要中间不包含句号,就可以匹配布拉、杰克和中间的一切。但是有可能做这样的事情吗 gibberish blah[^joe]*jack 只要中间没有“joe”这个词,就可以匹配这些废话、jack和中间的一切 更新: 我也可以使用AWK,如果它更适合这个目的的话 所以基本上,我只想得到“胡言乱语”这个句子,杰克,只要“乔”不在其他单词中 更新2(不同问题的答
gibberish blah[^.]*jack
只要中间不包含句号,就可以匹配布拉、杰克和中间的一切。但是有可能做这样的事情吗
gibberish blah[^joe]*jack
只要中间没有“joe”这个词,就可以匹配这些废话、jack和中间的一切
更新:
我也可以使用AWK,如果它更适合这个目的的话
所以基本上,我只想得到“胡言乱语”这个句子,杰克,只要“乔”不在其他单词中
更新2(不同问题的答案):
对不起,我累了。这个句子实际上可以包含“joe”一词,但不能包含其中的两个。所以“胡言乱语的吉尔·乔·穆奥·杰克”会被接受,但“胡言乱语的吉尔·乔·穆奥·乔·杰克”不会。
不管怎样,我找到了解决问题的办法。只需grep“gibberish.*jack”,然后进行单词计数(wc),看看那个句子中有多少个“joe”。如果wc返回值为1,那么它是可以的,但是如果它返回值为2或更多,那么这个句子是错误的
所以,很抱歉问了一个连我的问题都解决不了的问题。我认为斯普特尼克的答案是正确的,因为他的答案似乎可以解决原始帖子的问题。你要找的是名为环顾四周,它是
pcre
&perl
中的一种高级regex
技术。它在现代语言中使用。如果使用-P
开关,则可以处理此表达式。如果您没有-P
,请尝试使用pcregrep
。(或任何现代语言)
看
regex
,也许一个简单的grep-v“regex”
就足够了。(这取决于您的需要):
看
请尝试负查找语法:
blahish blah(?<!joe)*jack
blahish blah(?不,regex不允许你这么做。方括号内的东西是一个集合。无法在BRE或ERE中否定原子。尽管你可能可以在PCRE中这样做。这不清楚。它应该匹配“blah”或“blahish”第一?oO@sputnick你是对的,这还不清楚。我会编辑它。你有没有像我在我的帖子中解释的那样测试过grep-v
?只有在PCRE中。OP没有说他使用的是什么形式的RE。最好限定特定于技术的答案。OP提到了grep。因此,这可能不是一个有效的答案。另一方面,Perl确实有grep函数;)对不起,我在标题中说了grep。我也应该在帖子里澄清一下。是的,我正在使用grep。
man grep | less +/invert-match
blahish blah(?<!joe)*jack