Regular-Expression

匹配小於前一個匹配的下一個模式

  • December 23, 2015

我有一個帶有 QR 碼行的文件,我只想grep為那些其子序列長度不增加的文件。例子:

這個很好,因為下一個序列與前一個序列更少或相同:

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

這個是錯的:

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

我是這樣開始的:

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

但後來我意識到這將是不可能的繼續..

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

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變數。

引用自:https://unix.stackexchange.com/questions/250941