如何用 grep 否定标记的子表达式

How to negate marked subexpressions with grep

假设我有一个表达式 egrep "^b([aeuio])$" 这将匹配一个以 b 开头的 3 字母单词,后面跟着一个元音,然后再次匹配相同的元音。如何取反标记的子表达式,以便第一个元音后跟任何不是第一个元音的字符。

so that the first vowel is followed by any character that is not the first vowel

使用以下方法:

echo "bay" | grep -P '^b([aeuio])(?!).$'

输出(匹配):

bay

-P 选项,允许 Perl 兼容的正则表达式

(?!) - 前瞻性否定断言,确保 第一个元音 后面不跟自己


虽然 echo "baa" | grep -P '^b([aeuio])(?!).$' 不会匹配

另一种方法是标准 grep 匹配过程。列出您希望通过 grep grep 的内容,通过管道过滤您希望通过 grep -v 遗漏的内容。所以结果将是:

egrep "^b([aeuio]).$" | egrep -v "^b([aeuio])$"