首页 > 解决方案 > 在 awk 中使用 not 运算符 (!) 的 grep 和 sed 中的等效正则表达式

问题描述

假设我想找到这种形式的正则表达式:

awk '!/[^TAP]/ {print $1}' sample.txt

它为 ATA 提供匹配,但不为 ATAU、TAR 和 TR 提供匹配。

另一方面,这为所有四个提供了匹配:

awk '/[TAP]/ {print $1}' sample.txt

grep对于前一种情况,正确的正则表达式语法是什么sed

模拟输入文件是:

ATA
ATAU
TAR
TR

输出应该是由仅包含字符 A 和/或 T 和/或 P,但不包含任何其他字符的字符串组成的行。

标签: regexawksedgrep

解决方案


你可以使用这个awk

awk '/^[ATP]+$/' file

ATA

或者这grep也可以:

grep '^[ATP]\+$' file

ATA

正则表达式模式^[ATP]+$将匹配一个或多个ATP字母,并且由于锚点^$,它不允许任何其他字符。


推荐阅读