Estoy usando Unix en Bash Shell y deseo verificar que tenga la siguiente forma:
[0-9*][,[0-9*]*]
Entonces, todas las siguientes cadenas serían válidas:
- 141.325.562
- sesenta y cinco
- 659,948,8465,9853,2659,156,884,351,0,451,01,10
Mi Unix es bastante básico por lo que agradecería toda ayuda.
Respuesta1
Para hacer coincidir el contenido de una variable de shell en bash
, zsh
o ksh93
:
re='^[0-9]+(,[0-9]+)*$'
[[ $string =~ $re ]] && echo matches
POSIXly:
case $string in
("" | *[!,0-9]* | ,* | *, | *,,*) ;;
(*) echo matches;;
esac
Bournelly:
expr " $string" : ' [0-9]\{1,\}\(,[0-9]\{1,\}\)*$' > /dev/null &&
echo matches
Para hacer coincidir líneas de entrada:
grep -xE '[0-9]+(,[0-9]+)*'
Usamos +
(o el equivalente BRE \{1,\}
) para igualar1o más dígitos. *
coincidiría0o más.
Respuesta2
La expresión regular que deseas es probablemente esta:
[0-9]*[,[0-9]+]*
Además, puedes comprobar las expresiones regulares sobre la marcha con esta herramienta:https://regex101.com/