在 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
对于前一种情况,grep
和 sed
中正确的正则表达式语法是什么?
模拟输入文件是:
ATA
ATAU
TAR
TR
输出应该是由仅包含字符 A and/or T and/or P 的字符串组成的行,但不包含任何其他字符。
你可以使用这个 awk
:
awk '/^[ATP]+$/' file
ATA
或者这个 grep
也可以:
grep '^[ATP]\+$' file
ATA
正则表达式模式 ^[ATP]+$
将匹配 A
、T
或 P
字母中的一个或多个,并且由于锚点 ^
和 $
, 它不允许任何其他字符。
这可能适合您 (GNU sed):
sed '/[^TAP]/d' file
如果 T
、A
或 P
中都没有,请删除该行。
或:
sed -n '/[^TAP]/!p' file
关闭隐式打印,如果正则表达式为假,则打印该行。
假设我想找到这种形式的正则表达式:
awk '!/[^TAP]/ {print }' sample.txt
它匹配 ATA,但不匹配 ATAU,TAR 和 TR。
另一方面,这给出了所有四个匹配项:
awk '/[TAP]/ {print }' sample.txt
对于前一种情况,grep
和 sed
中正确的正则表达式语法是什么?
模拟输入文件是:
ATA
ATAU
TAR
TR
输出应该是由仅包含字符 A and/or T and/or P 的字符串组成的行,但不包含任何其他字符。
你可以使用这个 awk
:
awk '/^[ATP]+$/' file
ATA
或者这个 grep
也可以:
grep '^[ATP]\+$' file
ATA
正则表达式模式 ^[ATP]+$
将匹配 A
、T
或 P
字母中的一个或多个,并且由于锚点 ^
和 $
, 它不允许任何其他字符。
这可能适合您 (GNU sed):
sed '/[^TAP]/d' file
如果 T
、A
或 P
中都没有,请删除该行。
或:
sed -n '/[^TAP]/!p' file
关闭隐式打印,如果正则表达式为假,则打印该行。