在 awk 中使用非运算符 (!) 的 grep 和 sed 中的等效正则表达式

Equivalent regex in grep and sed of using not operator (!) in awk

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

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

它匹配 ATA,但不匹配 ATAU,TAR 和 TR。

另一方面,这给出了所有四个匹配项:

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

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

模拟输入文件是:

ATA
ATAU
TAR
TR

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

你可以使用这个 awk:

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

ATA

或者这个 grep 也可以:

grep '^[ATP]\+$' file

ATA

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

这可能适合您 (GNU sed):

sed '/[^TAP]/d' file

如果 TAP 中都没有,请删除该行。

或:

sed -n '/[^TAP]/!p' file

关闭隐式打印,如果正则表达式为假,则打印该行。