Regex Grep匹配一个单词,但不匹配另一个单词

Regex Grep匹配一个单词,但不匹配另一个单词,regex,grep,Regex,Grep,我想将一行与foo匹配,后面不跟bar,例如 foo 123 <-- match foo bar <-- not match 有什么想法吗?您可以尝试下面的grep命令,该命令使用-Pperl regexp参数 grep -P 'foo(?:(?!bar).)*$' file 例如: 或 仅使用负前瞻来检查字符串栏是否位于tofoo之后,而不匹配以下任何字符 $ grep -P 'foo(?!.*bar)' file foo 123 您可以尝试下面的grep命令,该命令使用-P

我想将一行与foo匹配,后面不跟bar,例如

foo 123 <-- match
foo bar <-- not match

有什么想法吗?

您可以尝试下面的grep命令,该命令使用-Pperl regexp参数

grep -P 'foo(?:(?!bar).)*$' file
例如:

仅使用负前瞻来检查字符串栏是否位于tofoo之后,而不匹配以下任何字符

$ grep -P 'foo(?!.*bar)' file
foo 123

您可以尝试下面的grep命令,该命令使用-Pperl regexp参数

grep -P 'foo(?:(?!bar).)*$' file
例如:

仅使用负前瞻来检查字符串栏是否位于tofoo之后,而不匹配以下任何字符

$ grep -P 'foo(?!.*bar)' file
foo 123

在没有grep-p(如OSX)的系统上,您可以使用以下awk命令:


在没有grep-p(如OSX)的系统上,您可以使用以下awk命令:

可以使用-v反转匹配:

grep -v 'foo.*bar' file
可以使用-v反转匹配:

grep -v 'foo.*bar' file

但是,这场比赛不会在没有foo的情况下进行吗?然而,grep-foo | grep-v bar可能会根据OP的要求工作。但是,在没有foo的情况下,这难道不匹配吗?然而,grepfoo | grep-v条可能会根据OP的要求工作。