如何用 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])$"
假设我有一个表达式 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])$"