如何在grep和sed中实现awk非运算符!的等效正则匹配
正则匹配仅由A/T/P字符组成行的grep、sed实现
原awk命令的核心逻辑为「排除所有包含非A/T/P字符的行」,等价于匹配整行仅由A/T/P三种字符组成的行,对应grep、sed实现如下:
grep 实现
- 反向匹配(和原awk逻辑完全一致,排除含非法字符的行):
说明:grep -v '[^TAP]' sample.txt-v参数表示反向匹配,输出不命中正则的行;[^TAP]匹配所有不是A/T/P的字符,最终输出的就是完全不含其他字符的行。 - 正向匹配(锚定整行范围):
基础正则(允许匹配空行):grep '^[TAP]*$' sample.txt
扩展正则(仅匹配非空行):grep -E '^[TAP]+$' sample.txt
说明:^锚定行首,$锚定行尾,*表示匹配0个及以上前面的字符,+表示匹配1个及以上。
sed 实现
- 反向匹配(和原awk逻辑一致,删除含非法字符的行):
说明:sed '/[^TAP]/d' sample.txt/[^TAP]/d表示命中「含非A/T/P字符」的行直接删除,剩余行自动输出。 - 正向匹配(只打印符合要求的行):
基础正则(允许匹配空行):sed -n '/^[TAP]*$/p' sample.txt
扩展正则(仅匹配非空行):sed -nE '/^[TAP]+$/p' sample.txt
说明:-n参数关闭默认输出,p指令表示打印命中正则的行。
针对你给出的测试输入,上述所有命令的输出均只有ATA一行,符合预期要求。
内容的提问来源于stack exchange,提问作者Caterina
相关产品推荐
相关产品推荐

