Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grep Regex-括号中的单词?_Regex_Grep - Fatal编程技术网

Grep Regex-括号中的单词?

Grep Regex-括号中的单词?,regex,grep,Regex,Grep,我想知道grep中的正则表达式,以匹配所有非特定单词。我知道如何不匹配不是单个字符的所有字符 gibberish blah[^.]*jack 只要中间不包含句号,就可以匹配布拉、杰克和中间的一切。但是有可能做这样的事情吗 gibberish blah[^joe]*jack 只要中间没有“joe”这个词,就可以匹配这些废话、jack和中间的一切 更新: 我也可以使用AWK,如果它更适合这个目的的话 所以基本上,我只想得到“胡言乱语”这个句子,杰克,只要“乔”不在其他单词中 更新2(不同问题的答

我想知道grep中的正则表达式,以匹配所有非特定单词。我知道如何不匹配不是单个字符的所有字符

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