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

时间:2017-03-26 16:40:01

标签: regex bash grep regex-negation

假设我有一个表达式,例如egrep "^b([aeuio])\1$" 这将匹配一个3字母的单词,以b开头,然后是同一个誓言。如何否定标记的子表达式,以便第一个誓言后跟任何不是第一个誓言的字符。

2 个答案:

答案 0 :(得分:1)

  

这样第一个元音后跟任何不是的元素   第一个元音

使用以下方法:

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

输出(作为匹配项):

bay

-P选项,允许Perl兼容常规表达

(?!\1) - 前瞻性否定断言,确保第一个元音不会自行跟随

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

答案 1 :(得分:0)

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

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