工作中有一个这样的需求,在一堆01排列的固定长度的数字中找出n次命中即出现n个1的情况,人肉的方式肯定不行,因为排列组合的情况太多了,用正则是当然的,怎么用却一时没想出来,后来翻了grep命令的一些参数后,找到一个方法,算简洁高效:
file=youfile
cat $file| grep -oP “^0{0,20}10{0,20}10{0,20}”
-P代表使用正则,不多说
-o倒是第一次使用,代表输出符合规则的字符流,而不是整行,如“0101001010…” 只会输出前面满足条件的0101
到这里,其实距离目标就只差一点了,再启用一个管道和正则:
| grep -P “\w{22}”
整个脚本的意思便是:选出01文件的固定长度(或起始有用的长度)为22,出现两次1的情况,注意1出现的次数和{0,20}中的20,两者加起来应该是整个长度22
同理,可以完成出现3次,4次,n次1的情况
为了简化正则书写,还可以改写成这样:
cat $file | grep -oP “^0{0,20}(10{0,20}){2}” | grep -P “\w{22}” >targetfile
No Comments for this post
还没有评论。
Leave a comment