匹配小于上一个匹配的下一个模式

匹配小于上一个匹配的下一个模式

我有一个包含 QR 代码行的文件,我只想grep为其子序列不增加长度。例子:

这个很好,因为下一个序列与上一个序列更少或相同:

####### ###### ### ### ## # # #

这个是错误的:

### ## ## ### ### ### ###### ##

我是这样开始的:

egrep "[^#](####)+[ ]+(##)+" qr.txt

但后来我意识到这是不可能继续下去的。

答案1

grep -vE '(^| )(#+) .*\2#' <<END
####### ###### ### ### ## # # #
### ## ## ### ### ### ###### ##
END
####### ###### ### ### ## # # #

答案2

awk

awk '{l=length($1);for(i=2;i<=NF;i++){if(length($i)>l){next};l=length($i)}}1' file
  • l=length($1)将变量设置l为第一个字段的长度。
  • for(i=2;i<=NF;i++)从第二个字段开始循环遍历所有字段。
  • if(length($i)>l如果该字段的长度大于最后一个字段的长度:
    • next;跳到下一行。
  • l=length($i)设置l下一次迭代的变量。

相关内容