如何用Unix单行命令排除NH:i:后数字不等于1的指定行
解决方案
你可以使用awk或者grep实现需求,两种方案如下:
方案1:使用awk(兼容性更好,逻辑更易读)
命令:
awk '!/^NH:i:[0-9]+$/ || /^NH:i:.*1$/' your_file.txt
逻辑说明:
- 匹配规则为:只要满足两个条件之一就保留行
- 行不匹配
NH:i:加纯数字的格式 - 行匹配
NH:i:加纯数字的格式,且末尾字符为1
- 行不匹配
- 自动排除所有符合
NH:i:[数字]格式且末尾数字不为1的行,其他所有行都会保留
方案2:使用grep(更简洁)
命令:
grep -v '^NH:i:[0-9]*[^1]$' your_file.txt
逻辑说明:
-v参数表示排除匹配正则的行- 正则
^NH:i:[0-9]*[^1]$匹配所有符合NH:i:加纯数字格式且末尾数字不是1的行 - 不符合该正则的所有行(包括非
NH:i:格式的行、NH:i:加数字且末尾为1的行)都会被保留
效果验证
针对你给出的示例文件,执行上述命令后输出结果为:
NH:i:1 NH:i:11
其他不符合保留规则的NH:i:行都会被过滤,如果你文件中有其他不匹配NH:i:[数字]格式的行,也会全部保留。
内容的提问来源于stack exchange,提问作者fattel
相关产品推荐
相关产品推荐

