Como posso verificar uma string variável (modificável) no Unix?

2

Estou usando o Unix em um Bash Shell e desejo verificar se ele é da seguinte forma:

[0-9*][,[0-9*]*]

Então, as seguintes strings seriam todas válidas:

  • 141,325,562
  • 65
  • 659.948.8465,9853,2659,156,884,351,0,451,01,10

Meu Unix é bastante básico, então toda ajuda seria apreciada.

    
por HugMyster 27.09.2016 / 11:12

2 respostas

3

Para corresponder ao conteúdo de uma variável de shell em bash , zsh ou ksh93 :

re='^[0-9]+(,[0-9]+)*$'
[[ $string =~ $re ]] && echo matches

POSIXly:

case $string in
  ("" | *[!,0-9]* | ,* | *, | *,,*) ;;
  (*) echo matches;;
esac

Bournely:

expr " $string" : ' [0-9]\{1,\}\(,[0-9]\{1,\}\)*$' > /dev/null &&
  echo matches

Para corresponder nas linhas de entrada:

grep -xE '[0-9]+(,[0-9]+)*'

Usamos + (ou o equivalente BRE \{1,\} ) para corresponder a 1 ou mais dígitos. * corresponderia a 0 ou mais.

    
por 27.09.2016 / 12:15
0

O regex que você quer é provavelmente este:

[0-9]*[,[0-9]+]*

Além disso, você pode verificar regex on-the-fly com esta ferramenta: link

    
por 27.09.2016 / 11:22