如何使用命令行筛选文本中按点分割后末字段长度为2的行
满足筛选要求的实现方法
之前的grep方案为啥不好用
- 用
grep uk筛本质是无差别找所有带uk字符的行,只要文本任意位置出现"uk"就会被捞出来,面对混杂大量无关内容的文件,会把完全不相关的文本误判成目标行,根本匹配不上你要的结构校验逻辑 - 你要的筛选逻辑根本不是“找带uk的行”,是逐行把内容按
.拆成字段,只要拆完后最后一段字段的长度是2,就输出这行的完整原始内容,不需要关心最后一段具体是什么字符
一步到位的处理命令
直接复用你之前已经用过的awk规则,加个长度判断就行,不需要换工具:awk -F. 'length($NF) == 2 {print $0}' yahoo.txt
实际效果验证
对着你给的4行测试文件跑出来的结果,和你的预期完全一致:
a.yahoo.co.uk yahoo.co.uk
这个方案的优势
- 完全不会误筛无关内容:比如有一行文本是“查阅下uk地区的合规要求”,虽然整行带uk,但按
.拆完的最后一段是“要求”,长度不符合2字符的规则,会被直接排除,不会混进结果里 - 不需要针对不同的2字符后缀(比如uk、io、ai这类)单独写匹配规则,只要最后一段长度符合要求,就会被正常筛出
- 如果要排除整行没有
.的无效内容(比如整行就是个2字符的普通文字),可以给命令加个字段数判断,调整为:awk -F. 'NF > 1 && length($NF) == 2 {print $0}' yahoo.txt
内容的提问来源于stack exchange,提问作者Amit
相关产品推荐
相关产品推荐

