Estou usando Unix em um Bash Shell e desejo verificar se ele tem o seguinte formato:
[0-9*][,[0-9*]*]
Portanto, 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.
Responder1
Para corresponder ao conteúdo de uma variável shell bash
em zsh
ou ksh93
:
re='^[0-9]+(,[0-9]+)*$'
[[ $string =~ $re ]] && echo matches
POSIXamente:
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 corresponder1ou mais dígitos. *
combinaria0ou mais.
Responder2
O regex que você deseja é provavelmente este:
[0-9]*[,[0-9]+]*
Além disso, você pode verificar regex dinamicamente com esta ferramenta:https://regex101.com/