Eu tenho alguns arquivos com nomes numéricos: 2341a.po
, 4567211someword.po
, 0012.po
, etc. Eu gostaria de encontrar um conjunto de arquivos com base no intervalo numérico. como [126 - 363]
.
Normalmente, uso expressões regulares com find
. Qualquer intervalo numérico [N, M]
pode ser composto por duas expressões regulares larger than N
e less than M
.
O maior que N:
Se N = vxyz
, eu primeiro faço uma correspondência para todos os value > V000, (V=v+1)
com [V-9]\d{3,}
Em seguida, corresponda vX00
, X=x+1
, com v[X-9]\d\d
Em seguida, corresponda vxY0
, Y=y+1
, com vx[Y-9]\d
e último vxy[z-9]
Exemplo:
Para corresponder a number>=234
, eu uso:
'^(0*([3-9]\d{2,}|2[4-9]\d|23[4-9]))'
O menor que M:
Com base em lógica semelhante, teremos:
^(0*(vxy[0-z]|vx[0-Y]\d|v[0-X]\d\d|[1-V]\d\d|\d{1,3}))[^0-9]
com Y=y-1,X=x-1,V=v-1
Por exemplo, o comando follow encontrará qualquer arquivo entre [253, 326]:
find . -maxdepth 1 -type f -regextype posix-extended -iregex '^\./0*([3-9][0-9]{2,}|2[6-9][0-9]{2,}|25[3-9]).*' -iregex '^\./0*(32[0-6]|3[0-1][0-9]|[0-2][0-9][0-9]|[0-9]{1,2})[^0-9].*'
No entanto, esse método é muito chato para lidar com números longos. Existe alguma maneira melhor e mais fácil de fazer isso?