我想知道 grep 中的正则表达式,以匹配非特定单词的所有内容。我知道如何不匹配不是单个字符的所有内容,
gibberish blah[^.]*jack
只要中间没有一段时间,那就会匹配blah,jack和介于两者之间的一切。但有可能做这样的事情吗?
gibberish blah[^joe]*jack
匹配blah,jack和介于两者之间的所有东西,只要它们之间没有包含“joe”这个词?
更新 如果能更好地适应这个目的,我也可以使用AWK。
所以基本上,我只想得到句子“乱七八糟的其他单词杰克”,只要“乔”不是其他的话。
更新2(答案,针对不同的问题):
抱歉,我累了。这句话实际上可以包含“joe”这个词,但不包含其中的两个。因此,“胡言乱语的jh joe moo jack”将被接受,但“乱搞blah jill joe moo joe jack”不会。 无论如何,我找到了解决问题的方法。只是grep for“gibberish。* jack”,然后做一个单词计数(wc)来查看该句子中有多少“joes”。如果wc返回1,那么没关系,但如果它返回2或更多,则判断错误。
所以,抱歉提出一个甚至无法解决我的问题的问题。我会将sputnick的答案标记为正确答案,因为他的答案看起来会解决原始职位问题。
答案 0 :(得分:2)
您正在寻找的是环顾四周,它是regex
中的高级pcre
技术& perl
。它用于现代语言。如果您有-P
开关,grep可以处理此表达式。如果您没有-P
,请尝试使用pcregrep
。 (或任何现代语言)。
见
注意强>
如果您只是想否定 regex
,那么简单的grep -v "regex"
就足够了。 (这取决于您的需求):
$ echo 'gibberish blah other words jack' | grep -v 'joe'
gibberish blah other words jack
$ echo 'gibberish blah joe other words jack' | grep -v 'joe'
$
见
man grep | less +/invert-match
答案 1 :(得分:0)
尝试使用否定的lookbehind语法:
blahish blah(?<!joe)*jack